2014-04-10 16 views
6

Così sto provando a distribuire la mia app per rails in produzione. Quando vado alla pagina ottengo un errore di 500. Quando vado ai miei log di errore ottengo il seguente errore:rails secret_key_base non riconosciuto in produzione

Exception RuntimeError in Rack application object (Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`) 

Sono in esecuzione Rails 4.1 e il mio config/secrets.yml appare così:

development: 
     secret_key_base: <development key>   
    test: 
     secret_key_base: <test key> 

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

ho corse rastrello segreto per ottenere il chiave e metti l'esportazione nel mio file bash_profile e l'ho acquistata. Ho eseguito asset rake: precompilato con successo. Eppure continuo a ricevere questo errore. Qualche idea?

Aggiornamento: ho provato ad aggiornare il messaggio di errore fornito per fornire informazioni leggermente migliori .... e il messaggio non è stato aggiornato. Ho quindi provato ad aggiungere la chiave direttamente al file yml invece di usare una variabile di ambiente e ancora nessun dado. Im in esecuzione su hostmonster quindi non posso riavviare il server ..... ma qualcosa mi sta dicendo che è quello che deve essere fatto ...

Aggiornamento 2: Dopo aver dormito tutta la notte sembra che questo problema non è più un problema Deve essere stata una sorta di memorizzazione nella cache. Ora il mio problema è che sta provando ad usare una vecchia configurazione che ho cambiato giorni fa per il mio database. Se capisco come annullare la cache, la posterò qui e la contrassegnerò come una risposta. Se qualcun altro sa come farlo, fatemelo sapere e lo contrassegnerò come risposta. Sto usando HostMonster come mio hosting e ho seguito i passi che hanno sul loro sito per l'hosting della mia app.

risposta

5
  1. è necessario riavviare il server, perché dopo YourAppName::Application.initialize! chiamato config/environment.rb non è possibile modificare le impostazioni.
  2. Acquista il tuo markup yml, probabilmente c'è qualche errore
  3. Probabilmente qualcosa di sbagliato nelle vostre config/inizializzatori/secret_token.rb

il problema non è con ENV pseudo-hash. secret_key_base sarà nullo se in ENV non esiste una chiave di questo tipo.

+0

Sto usando Hostmonster per ospitare questa app (hosting condiviso) .... come posso riavviare il mio server? –

+1

Inoltre, in 4.1 non ci sono config/initializers/secret_token.rb. Ora c'è solo un config/secrets.yml e l'ho postato sopra lo –

+1

Controlla le impostazioni di distribuzione. Probabilmente hai bisogno di specificare config/secrets.yml in linked_files (come database.yml se stai usando capistrano) –

5

Ho avuto lo stesso problema e ho risolto creando una variabile d'ambiente per essere caricato ogni volta che faccio il login al server di produzione e ha fatto un mini guida dei passaggi per configurare dal vostro auto nel mio gist:

https://gist.github.com/pablosalgadom/4d75f30517edc6230a67

Così stavo usando Rails 4.1 con v4.8.2 Unicorn e quando ho provato a schierare la mia app non si avvia correttamente e nel file unicorn.log ho trovato questo messaggio di errore:

"errore di applicazione : Manca secret_key_base per l'ambiente di 'produzione', impostare questo valore in config/secrets.yml (RuntimeError) "

Dopo una piccola ricerca ho scoperto che Rails 4.1 cambia il modo di gestire la secret_key, quindi se leggiamo il file secrets.yml situato in exampleRailsProject/config/secrets.yml (è necessario sostituire "exampleRailsProject" per il nome del progetto) troverete qualcosa di simile:

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

Questo significa che le rotaie si raccomanda di utilizzare una variabile di ambiente per la secret_key_base nel nostro server di produzione, per cui al fine per risolvere questo errore dovrai seguire questa procedura per creare una variabile d'ambiente per linux (nel mio caso è Ubuntu) nel nostro server di produzione:

1.- Nel terminale del nostro server di produzione eseguirai il prossimo comando:

$ RAILS_ENV=production rake secret 

Questo darà una grande stringa con lettere e numeri, questo è quello che ti serve, quindi copialo (ci riferiremo a quel codice come GENERATED_CODE).

2.1- Ora, se il login come utente root per il nostro server ci sarà bisogno di trovare questo file e aprirlo: $ vi/etc/profile

Poi andiamo alla fine del file ("SHIFT + G "per capitale G in VI)

E scriveremo la nostra variabile di ambiente con il nostro GENERATED_CODE (premere il tasto" i "per scrivere in VI), assicurarsi di essere in una nuova riga alla fine del file:

export SECRET_KEY_BASE=GENERATED_CODE 

Dopo aver scritto il codice, salviamo le modifiche e chiudiamo t file (premiamo il tasto "ESC" e poi scriviamo ": x" e "ENTER" per salvare ed uscire in VI)

2.2 Ma se effettuiamo il login come utente normale, chiamiamolo example_user per questo elenco, noi sarà bisogno di trovare uno di questi altri file:

$ vi ~/.bash_profile 
$ vi ~/.bash_login 
$ vi ~/.profile 

Questi file sono in ordine di importanza, il che significa che se si ha il primo file, allora si avrebbe senza bisogno di scrivere negli altri. Quindi, se avete trovato questo 2 file nella directory "~/.bash_profile" e "~/.profile" solamente dovrà scrivere nel primo "~/.bash_profile", perché linux leggerà solo questa e l'altra sarà ignorato.

poi andiamo alla fine del file ("SHIFT + G" per il capitale G in VI)

E ci sarà scrivere il nostro variabile d'ambiente con il nostro GENERATED_CODE (Premere il tasto "i" per scrivere in VI) , essere sicuri di essere in una nuova riga alla fine del file:

export SECRET_KEY_BASE=GENERATED_CODE 

dopo aver scritto il codice salviamo le modifiche e chiudere il file (spingiamo tasto "ESC" e quindi scrivere ": x" e tasto "ENTER" per salvare e uscire in VI)

3.-possiamo verificare che la nostra variabile d'ambiente è prope rly set in linux con questo comando:

$ printenv | grep SECRET_KEY_BASE 

o con:

$ echo $SECRET_KEY_BASE 

Quando si esegue questo comando, se tutto è andato bene, che vi mostrerà la GENERATED_CODE che abbiamo generato prima. Finalmente con tutte le configurazioni fatte puoi implementare senza problemi la tua app Rails con Unicorn o altro.

Ora, quando si chiude il terminale della shell e si effettua nuovamente il login al server di produzione, questa variabile d'ambiente sarà impostata e pronta per l'uso.

E questo è tutto !! Spero che questa mini guida ti aiuti a risolvere questo errore.

Problemi correlati