2015-02-27 8 views
9

Sind sowohl secret_key_base als auch secret_token für die Produktion in Rails 4.2 erforderlich? Einstellung weder verursacht die folgende Ausnahmemeldung:Verwendet Rails 4.2 secret_token?

secret_token und secret_key_base für 'Produktion' Umgebung fehlt, setzen diese Werte in config/secrets.yml

Das 4.2 Upgrade-Anleitung (http://railsapps.github.io/updating-rails.html) sagt dazu:

Wenn Sie eine neue Rails-Anwendung mit dem Befehl rails new erstellen, wird ein eindeutiger geheimer Schlüssel generiert und in dengeschriebenDatei config/initializers/secret_token.rb.

Aber keine solche Datei erstellt wurde, wenn ich meine app erzeugt, und es gibt keinen Hinweis in config secret_token/secrets.yml

Ich gehe davon aus, dass die Fehlermeldung falsch ist, und dass nur secret_key_base wird gebraucht. Wenn ich meine App in der Produktion auf meinem Dev-Rechner starte, startet sie nur mit secret_key_base, aber in Engineyard funktioniert die Einstellung von secret_key_base (über eine Umgebungsvariable) nicht. Ich bekomme immer noch den Fehler.

Antwort

4

Das Problem, das Sie auf Engine Yard sind zu sehen ist, weil die secret_key_base Umgebungsvariable nicht (noch) nicht vorhanden sind standardmäßig aktiviert. Daran arbeiten wir gerade. Sie können dies mit einem benutzerdefinierten Koch selbst vornehmen; Ich schlage vor, mit unserem Support-Team für weitere Informationen darüber zu sprechen.

Wie für den eigentlichen Fehler, den Sie bekommen, habe ich gerade eine brandneue Rails 4.2 App ("Schienen New Foo") getestet, um zu sehen, ob es Secret_Token.rb generiert, was es nicht ist. Ich denke, was Sie hier brauchen, ist config/secrets.yml zu erstellen, und diese Datei sollte wie folgt aussehen:

development: 
    secret_key_base: somekey 

test: 
    secret_key_base: someotherkey 

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

Wenn Sie jetzt ENV siehe [ „SECRET_KEY_BASE“], das ist, wo Engine Yard ein bisschen hat der eine Wendung - das liefern wir noch nicht aus der Box.Solange Ihr Repo privat ist, können Sie dort selbst hart codieren. Andernfalls könnte die Verwendung von benutzerdefiniertem Chef Sie davon abhalten, eine geheime Schlüsselbasis zu erstellen und sie in das Wrapper-Skript einzufügen, das für das Starten Ihrer App-Worker-Prozesse verantwortlich ist (z. B. config/env.custom auf unserer Plattform).

Hoffe, das hilft.

+1

Auch dies kann einige Ihrer Fragen zu secret_token vs. secret_key_base beantworten: http://guides.rubyonrails.org/upgrading_ruby_on_rails.html#action-pack –

+0

Vielen Dank für die schnelle Antwort. Ich habe auch keine secret_token.rb-Datei erhalten, als ich die App erstellt habe (daher nehme ich an, dass sie nicht mehr verwendet wird), und meine automatisch generierte Datei secrets.yml sieht genauso aus wie die, die Sie hier gepostet haben. Wenn ich ENV ["SECRET_KEY_BASE"] nicht standardmäßig unterstütze, kann ich den Edelstein dotenv verwenden, anstatt ihn in die Datei zu schreiben? –

+0

Das Juwel von Dotenv funktioniert auf unserer Plattform nicht, da wir über eigene Wrapper-Skripts verfügen, mit denen Umgebungsvariablen vor der Ausführung des Anwendungsservers (z. B. Unicorn) festgelegt werden. Während es in der Entwicklung auf Ihrem lokalen Rechner in der Produktion funktioniert, müssen Sie/data/ /shared/config/env.custom ändern, was eine Datei ist, die vom benutzerdefinierten Chef geändert werden sollte, da alle Dateien behandelt werden sollten als Disposable und Config Management gilt als eine beste/erforderliche Praxis. –

0

Ich würde vorschlagen, eine neue App mit der neuesten Version von Rails neu zu generieren.

Diese Datei in meinem letzten Projekt automatisch generiert wurde:

# config/secrets.yml 
# Be sure to restart your server when you modify this file. 

# Your secret key is used for verifying the integrity of signed cookies. 
# If you change this key, all old signed cookies will become invalid! 

# Make sure the secret is at least 30 characters and all random, 
# no regular words or you'll be exposed to dictionary attacks. 
# You can use `rake secret` to generate a secure secret key. 

# Make sure the secrets in this file are kept private 
# if you're sharing your code publicly. 

development: 
    secret_key_base: fooooo 

test: 
    secret_key_base: fooooo 

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

ich auch würde empfehlen, dass Sie die generierten Dateien über das railsdiff Website (Beispiel: http://railsdiff.org/4.1.10.rc2/4.2.1.rc2) vergleichen, wie es klingt wie Sie ein Upgrade von einer älteren Version.

+1

Ich bin mit Rails 4.2.0, und ich habe das gleiche automatisch generierte secrets.yml Datei Ich zeige. Aber auf meine Frage, wo kommt secret_token ins Spiel? Die Fehlermeldung besagt, dass beide, die ich vermute, falsch sind. Der Upgrade-Guide sagt, dass eine config/secret_token.rb Datei generiert wurde - hat deine App eine? –

+1

Sie beziehen sich auf eine inoffizielle Quelle - diese railsapp-Site ist veraltet, daher das Problem, das Sie sehen. Es gibt keine 'secret_token.rb' -Datei, die wie im App-Generator erstellt wurde (standardmäßig). Siehe Antwort von Austin Hughey für Motoryard spezifische Informationen. Vielen Dank! –

+1

OK, danke, Michael. Aber FYI - die tatsächliche Fehlermeldung von Rails 4.2 generiert auch, dass beide gesetzt werden müssen (zitiert in meiner ursprünglichen Frage), so dass es ein wenig verwirrend ist. –

2

4.2 verwendet den geheimen Schlüssel und der Link, den Sie gepostet haben, hat die Lösung, nach der Sie suchen.

In einer Umgebung, in der der geheime Schlüssel nicht aktiv ist, müssen Sie ihn mit rake secret generieren und dann die Ausgabe von der Konsole in Ihre config/initializers/secret_token.rb Datei einfügen (Sie können eine erstellen, wenn es keine gibt).

Sie haben die Möglichkeit, die Verwendung von secrets.yml zu vermeiden. Viele Leute bevorzugen die Verwendung eines anderen Edelsteins/Verfahrens (z. B. figaro) für die Handhabung geheimer Informationen. Um Ihr Leben zu vereinfachen, können Sie einfach diese Informationen in die Datei secret_token.rb eingeben und weitermachen - oder Sie können die verschiedenen anderen idiomatischen Möglichkeiten der Handhabung der Situation lernen.

+1

Aber warum sagt die Rails-Fehlermeldung, dass sowohl secret_key_base als auch secret_token gesetzt werden müssen? Ist das nur ein Fehler? Und ich verwende eine Umgebungsvariable, um secret_key_base in secrets.yml festzulegen, anstatt den Schlüssel in die Datei zu schreiben. Auf diese Weise muss ich es nicht gitimnore, und ich muss es nicht manuell bei jeder Bereitstellung neu erstellen. –

+0

@JPlato Ich denke, der Fehler bezieht sich nur auf secret_key_base und secret_token getrennt, aber traditionell würden Sie einfach secret_key_base innerhalb der Datei secret_token.rb setzen. Ehrlich gesagt bin ich nicht sicher über die Einzelheiten des Fehlers, ich weiß nur, dass ich eine 4.2-Anwendung habe, die diese secret_key_base benutzt, und habe kaum bemerkt, dass sie während meines Bereitstellungsvorgangs konfiguriert wurde. Also muss die Lösung einfach sein und es scheint, als ob die Fehlermeldung die Dinge nur verwirrender erscheinen lässt, als sie sein müssen. Ich habe auch meine Antwort aktualisiert, um klarer zu sein. – Ecnalyr

+1

Danke, @Ecnalyr. Ich denke du hast recht. Ich glaube, das Problem, das ich nach J. Austin Hughleys Antwort habe, ist die Unfähigkeit von Engineyard, dies über ENV zu erreichen. –

2

Mindestens Rails 4.2.2 gab mir den gleichen Fehler, aber die Einstellung die Umgebungsvariable SECRET_KEY_BASE in dem rails.bash_profile-Datei des Benutzers löste das Problem für mich, so dass die Spitze über secret_token scheint Schein zu sein - ein Überbleibsel aus früheren Versionen wahrscheinlich.

das Geheimnis Generieren von rake secret befiehlt, dann verwenden Sie die generierte Zeichenfolge in der Datei .bash_profile wie folgt aus:

export SECRET_KEY_BASE='the_output_of_the_rake_secret_command' 
Verwandte Themen