15

Also ich versuche, meine Rails-Anwendung zu bekommen im Produktionsmodus zu implementieren, aber ich habe den Fehler: Fehlende secret_token und secret_key_base für ‚Produktion‘ Umwelt, setzen diese Werte in config/secrets.ymlSchienenproduktion - Wie wird die geheime Schlüsselbasis festgelegt?

Meine secrets.yml Datei wird als erwartet :

Aber auch nach Google und Forschung habe ich keine Ahnung, was ich mit der Produktion geheimer Schlüsselbasis tun soll. Die meisten Informationen gehen davon aus, dass ich bestimmte Hintergrundkenntnisse habe, aber die Realität ist, dass ich ein Noob bin.

Kann mir jemand erklären, wie ich meinen geheimen Schlüssel einstellen und im Produktionsmodus arbeiten lassen kann?

+0

Mögliches Duplikat von [Wie Fehler zu lösen „Missing \' Geheimnis \ _key \ _base \ 'für 'production' environment" auf Heroku (Rails 4.1)] (http://stackoverflow.com/questions/23180650/how-to-solve-error-missing-secret-key-base-for- Produktionsumgebung-auf-h) – mbaitoff

Antwort

11

Die Fehler, die Sie erhalten, zeigen nur an, dass die Umgebungsvariable für secret_key_base nicht ordnungsgemäß auf dem Server festgelegt ist.

Sie können verschiedene Skripte wie capistrano verwenden, die den Prozess der Einstellung automatisieren, bevor die Anwendung ausgeführt wird.

Wie für eine schnelle Lösung versuchen Sie dies:

export SECRET_KEY_BASE=YOUR SECRET BASE 

Validate die Umgebungsvariablen und überprüfen, ob diese eingestellt worden sind.

Befehl:

env | grep -E "SECRET_TOKEN|SECRET_KEY_BASE"

Wenn Ihre Werte dann diese Pop-up auf dem Produktionsserver eingestellt.

Es ist auch die beste Vorgehensweise, ENV.fetch(SECRET_KEY) zu verwenden, da dies eine Ausnahme auslösen wird, bevor die App überhaupt startet.

+0

Was soll mein geheimer Token sein? Ich benutzte $ Rake Secret und es gab mir einen Schlüssel, aber was ist mit der Base? – nvrpicurnose

+3

'Rake Secret' erzeugt eine sichere Schlüssel-Zeichenfolge, die als' TOKEN' und 'BASE' verwendet werden kann. Rails benötigt diese nur, um ordnungsgemäß zu funktionieren und hinter den Kulissen einige Sicherheitsmaßnahmen durchzuführen. – JensDebergh

+0

Latest Rails benötigt nicht mehr 'secret_token'; nur 'secret_key_base' ist erforderlich. –

4

Wie Sie sehen können, gibt es einen fest codierten Wert für die Umgebungen development und test, aber der für production stammt von einer Variablen. Zuallererst, warum so? Es ist eine Sicherheitsfunktion. Auf diese Weise werden die Werte development und test freigegeben, wenn Sie diese Datei in Versionskontrolle wie Git oder Svn überprüfen, was in Ordnung ist, aber die production eine (die, die auf einer echten Website verwendet werden würde) ist nicht so niemand kann auf die Quelle schauen, um dieses Geheimnis zu bekommen.

Da für den Variable verwendet, ENV["SECRET_KEY_BASE"], ist dies eine Umgebungsvariable aus dem Umgebungs Rails zulaufen (nicht mit den Schienen „Umgebung“, wie development, test und production verwechselt werden). Diese Umgebungsvariablen stammen aus der Shell. Wie in JensD ‚s Beitrag erwähnt, können Sie diese Umgebungsvariable vorübergehend mit:

export SECRET_TOKEN=YOUR SECRET TOKEN 
export SECRET_KEY_TOKEN=YOUR SECRET BASE 

Um einen neuen geheimen Token zu erzeugen, verwenden Sie den Befehl rake secret in der Befehlszeile.

Das ist jedoch temporär und keine gute endgültige Lösung. Für eine endgültige Lösung, überprüfen Sie this article, die ein schnelles Bit gegen Ende der Implementierung dotenv zum Laden Konfigurationsgeheimnisse hat. Denken Sie daran, wenn Sie die Versionskontrolle verwenden, achten Sie darauf, dass Ihre .env Datei nicht eingecheckt wird!

Die Einstellung von dotenv up erfordert ein wenig Arbeit, aber ich empfehle es dringend, diese Umgebungsvariablen manuell zu konfigurieren.

+1

Gibt es eine Schritt für Schritt Anleitung, wie man eine Rails App in Produktion bringt? Ich kann nicht all diese Fragmente zusammenfügen, da mir das notwendige Hintergrundwissen fehlt – nvrpicurnose

+1

@nvrpicurnose lol Der Weg zu lernen ist, es immer wieder zu tun, bis es leichter wird. Ich spinne schon lange und reiße immer wieder Server herunter, bis ich es endlich verstanden habe. Nimmt viele Stunden und viele Tutorials, um es wirklich zu bekommen. Zumindest war es für mich so, ohne dass jemand wirklich meine Hand hielt und es mir zeigte. Bleib dran und es wird einfacher. Sehen Sie sich die Read-App für diese Demo-App an, die ich zu implementieren versucht habe. Könnte https://github.com/adiakritos/sw-checkin helfen –

21

Sie können den Schlüssel, indem Sie folgende Befehle

$ irb 
>> require 'securerandom' 
=> true 
>> SecureRandom.hex(64) 
=> "3fe397575565365108556c3e5549f139e8078a8ec8fd2675a83de96289b30550a266ac04488d7086322efbe573738e7b3ae005b2e3d9afd718aa337fa5e329cf" 
>> exit 
6

Diese Antwort hat mir sehr geholfen erzeugen. Er zeigt an, wie Sie die secrets.yml Datei in Produktion config und wie es aus der Umgebung zu lesen:

Original-Link: https://stackoverflow.com/a/26172408/4962760

I had the same problem and I solved it by creating an environment variable to be loaded every time that I logged in to the production server and made a mini guide of the steps to configure it:

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

I was using Rails 4.1 with Unicorn v4.8.2, when I tried to deploy my app it didn't start properly and in the unicorn.log file I found this error message:

"app error: Missing secret_key_base for 'production' environment, set this value in config/secrets.yml (RuntimeError)"

After some research I found out that Rails 4.1 changed the way to manage the secret_key, so if you read the secrets.yml file located at [exampleRailsProject]/config/secrets.yml you'll find something like this:

Do not keep production secrets in the repository,

instead read values from the environment. production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> This means that rails

recommends you to use an environment variable for the secret_key_base in your production server, in order to solve this error you should follow this steps to create an environment variable for Linux (in my case Ubuntu) in your production server:

1.- In the terminal of your production server execute the next command:

$ RAILS_ENV=production rake secret This returns a large string with letters and numbers, copy that (we will refer to that code as GENERATED_CODE).

2.1- Login as root user to your server, find this file and edit it: $ vi /etc/profile

Go to the bottom of the file ("SHIFT + G" for capital G in VI)

Write your environment variable with the GENERATED_CODE (Press "i" key to write in VI), be sure to be in a new line at the end of the file:

export SECRET_KEY_BASE=GENERATED_CODE Save the changes and close the file (we push "ESC" key and then write ":x" and "ENTER" key for save and exit in VI)

2.2 But if you login as normal user, lets call it example_user for this gist, you will need to find one of this other files:

$ vi ~/.bash_profile $ vi ~/.bash_login $ vi ~/.profile These files are in order of importance, that means that if you have the first file, then you wouldn't need to write in the others. So if you found this 2 files in your directory "~/.bash_profile" and "~/.profile" you only will have to write in the first one "~/.bash_profile", because Linux will read only this one and the other will be ignored.

Then we go to the bottom of the file ("SHIFT + G" for capital G in VI)

And we will write our environment variable with our GENERATED_CODE (Press "i" key to write in VI), be sure to be in a new line at the end of the file:

export SECRET_KEY_BASE=GENERATED_CODE Having written the code, save the changes and close the file (we push "ESC" key and then write ":x" and "ENTER" key for save and exit in VI)

3.- You can verify that our environment variable is properly set in Linux with this command:

$ printenv | grep SECRET_KEY_BASE or with:

$ echo $SECRET_KEY_BASE When you execute this command, if everything went ok, it will show you the GENERATED_CODE from before. Finally with all the configuration done you should be able to deploy without problems your Rails app with Unicorn or other.

When you close your shell terminal and login again to the production server you will have this environment variable set and ready to use it.

And thats it!! I hope this mini guide help you to solve this error.

Disclaimer: I'm not a Linux or Rails guru, so if you find something wrong or any error I will be glad to fix it!