2015-04-29 13 views
10

Recentemente ho estratto uno dei miei repository da Git. Dopo aver avviato il server, sto ricevendo quanto segue: Miss_secondo e secret_key_base. Questo potrebbe accadere perché ho incluso secrets.yml nel mio .gitignore.Manca `secret_token` e` secret_key_base` - Rails 4.2.0 con RVM

Il mio attuale configurazione

  • Ubuntu 14.04
  • rubino 2.2.0p0
  • rotaie 4.2.0
  • rvm 1.26.11
  • server locale (non remota) ambiente
  • sviluppo

Molte risorse online dichiarano che devo generare una nuova chiave usando rake secret e aggiungerla al secrets.yml. Posizionare la chiave all'interno di secrets.yml e riavviare il server di rotaie non funziona.


Modificato: contenuti aggiunti di secrets.yml di seguito. -04/30/15 09:04 EST

development: 
    secret_key_base: LONG KEY HERE 

test: 
    secret_key_base: LONG KEY HERE 

# Do not keep production secrets in the repository, 
# instead read values from the environment. 
production: 
    secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 

Sappiate questo è impostato come un ambiente di sviluppo su un server locale nel mio luogo di residenza (non Heroku).


altre risorse statali ho bisogno di aggiungere una voce dentro la mia secret_token.rb, ma questo file non esiste nel mio progetto.

L'unico modo la mia applicazione verrà eseguita è se dovessi creare un file secret_token.rb e aggiungere uno di seguenti all'interno di esso:

MyApp::Application.config.secret_token = if Rails.env.development? or Rails.env.test? 
    ('x' * 30) # meets minimum requirement of 30 chars long 
else 
    ENV['SECRET_TOKEN-'] 
end 

o

MyApp::Application.config.secret_token = 'the secret key' 

Perché questo file richiesto quando i documenti di Rails dichiarano di rimuoverlo?

3.3 config/secrets.yml

Il secret_token.rb non è richiesto, al fine di eseguire per i nuovi progetti generati, solo quelli dal mio Git pronti contro termine.

Si prega di avvisare sul motivo per cui la mia applicazione ha bisogno di secret_token.rb anche se lo stato dei documenti Rails è diverso altrimenti la mia applicazione non funzionerà senza di essa.

Modificato: -04/30/15 09:27 EST

Un altro strano comportamento è che posso cambiare titolo secrets.yml mentre il secret_token.rb rimane al suo posto e l'applicazione continua a funzionare.

Ho tentato di rinominare lo secret_token.rb, aggiunto <%= ENV["SECRET_KEY_BASE"] %> allo sviluppo e sto ancora riscontrando il problema di secret_token mancante.

Modificato: Aggiunto repo git di seguito. -05/08/15 02:50 EST

repo git: https://github.com/captain-awesome/blog_mac

Qualcosa di strano è che se dovessi modificare uno qualsiasi dei 32 caratteri, salvare il secret_token.rb, riavviare il server ... la mia app funzionerà. La stringa di 32 caratteri nel file secret_token.rb è qualcosa che posso truccare da solo? Se sì, qual è il vero scopo del rake segreto?

+0

Quindi prima di tutto '('x' * 30)', no no no. Puoi generare un token segreto eseguendo 'rake secret' nella tua app, questo è il modo giusto per generare un token segreto. Ma questo non risponde alla maggior parte della tua domanda, quindi lascerò semplicemente un commento qui. Potresti anche voler cercare lo scopo del token segreto, in modo da capire cosa sta succedendo. – jrochkind

risposta

4

Stai avviando il server localmente in sviluppo o in qualche altro ambiente (ad esempio, su Heroku in produzione)? Perché se stai utilizzando Heroku, dovrai rimuovere secrets.yml dal tuo .gitignore in modo che Heroku possa capire qual è la chiave segreta. Il modo sicuro per gestirli è archiviare la tua chiave segreta come variabile di ambiente su Heroku e avere il tuo secrets.yml punto (vedi sotto).

Se si esegue a livello locale, si dovrebbe essere in grado di cancellare il tuo secret_token.rb finché avete la vostra secret_key_base impostato per ogni ambiente all'interno il file secrets.yml. Non hai pubblicare quello che la vostra sembra, ma dovrebbe essere simile a questo:

development: 
secret_key_base: somerandomkey 
test: 
secret_key_base: somerandomkey 
staging: 
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 
production: 
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 
+0

Ciao Hannah, grazie per la tua risposta. Ho aggiunto i contenuti per secrets.yml e ho dichiarato che la mia messa in scena era lo sviluppo nel mio post. –

4

Come di Rails 4.1, c'è un new way per memorizzare i segreti.

In Rails 4.1+, è necessario config/secrets.yml - non cancellarlo! Riesco a vedere nel repository GitHub, si sta utilizzando Rails 4.2 e questo file manca. Questo è il motivo per cui vedi questo errore. (Nota: se si dispone ancora di un file secret_token.rb, rimuoverlo. Rails 4.1+ non lo utilizza più).

Si consiglia di utilizzare dotenv rails.

Add e commettere config/secrets.yml:

default: &default 
    secret_key_base: <%= ENV['SECRET_KEY_BASE'] %> 

development: 
    <<: *default 

test: 
    <<: *default 

staging: 
    <<: *default 

production: 
    <<: *default 

Ogni volta che si avvia rotaie, è necessario assicurarsi di impostare il sistema variabile environementSECRET_KEY_BASE. Con il file YAML sopra, è necessario assicurarsi che questa variabile d'ambiente sia impostata su qualsiasi macchina che avvia l'app Rails in qualsiasi ambiente. Il punto chiave è che questo come viene impostata la variabile può variare a seconda di dove/cosa è la propria macchina.

Sulla macchina locale (in casa), creare un file chiamato .env con un segreto:

echo SECRET_KEY_BASE=`rake secret` > .env 
rails server 

Hai solo bisogno di creare questo file volta. All'avvio delle rotaie, dotenv leggerà questo file .env e imposterà opportunamente la variabile di ambiente SECRET_KEY_BASE.Non impegnare questo file: in effetti, ti consiglio di aggiungerlo al tuo .gitignore.

Successivamente, quando si esegue la distribuzione su un server rimuovere (un server di produzione/distribuzione), le cose saranno diverse. Potrebbe essere necessario utilizzare SSH per impostare la variabile di ambiente. Su Heroku, puoi accedere al tuo app's dashboard e impostare un valore di ambiente (o usare config:set in Heroku Toolbelt).

Modifica:Nota Non l'ho inventato. Questo è l'approccio utilizzato da Suspenders.

0

modo semplice per generare il keybase token e sono:

bundle exec rake secret 

Ora si otterrà una lunga stringa del tipo:

ddf4a6d37a956089984c8fe6160a6e3c18e48a448a07a50e4ab10a4edd6d3597f13ad9b6e0af4f5723f1ef52bfd2ffa78ab5b815d2bb8b15f14f48e7e307baad

copia stessa stringa che hai sul tuo terminale/CMD

Non eseguire questo comando:

export SECRET_KEY_BASE=ddf4a6d37a956089984c8fe6160a6e3c18e48a448a07a50e4ab10a4edd6d3597f13ad9b6e0af4f5723f1ef52bfd2ffa78ab5b815d2bb8b15f14f48e7e307baad 

rails s -e production 

Ogni volta che si desidera cambiare la vostra follow chiave segreta sopra passi. Non scriverlo nel file per motivi di sicurezza.

Problemi correlati