wake-up-neo.com

Devise Secret Key wurde nicht festgelegt

Ich entwickle eine Rails 4-App unter Verwendung des Active Admin-Gem für das Verwaltungs-Back-End. Active Admin verwendet wiederum Devise zur Benutzerauthentifizierung. Wenn ich jetzt versuche, die App mithilfe von capistrano auf dem VPS-Server bereitzustellen, erhalte ich die folgende Fehlermeldung:

rake aborted!
Devise.secret_key was not set. Please add the following to your Devise initializer:
config.secret_key = '-- secret key --'

Eine Google-Suche tut diesem Fehler nicht viel. Irgendwelche Vorschläge, warum es einen Fehler wirft? Soll ich den devise-Initialisierer mit dem geheimen Schlüssel versehen, da ich keinen Platz finde, um einen solchen Konfigurationsschlüssel in initializers/devise.rb zu setzen?

96
user1139144

Ich lief heute Morgen bundle update und bekam den gleichen Fehler.

Ich habe es als Zeile in config/initializers/devise.rb hinzugefügt und der Fehler wurde behoben. 

Dies scheint das commit zu sein, durch das es eingeführt wurde.

85
Brian

Was bei Rails 4.1 und Devise 3.2.4 für mich funktioniert hat, ist in config/initializers/devise.rb:

config.secret_key = ENV['DEVISE_SECRET_KEY'] if Rails.env.production?
37
Paul Odeon

Ab Devise 3.2.3 für Rails 4+ -Anwendungen lautet der Schlüsselspeicherort standardmäßig YourAppName :: Application.config.secret_key_base in config/initializers/secret_token.rb

31
Brandon Cook

Wie im changelog :

Devise verwendet die Anwendungen secret_key_base on Rails 4+ als secret_key. Sie können dies ändern und Ihr eigenes Geheimnis verwenden, indem Sie den Initialisierer devise.rb ändern.

Ich ging zu config/secrets.yml und änderte den production-Wert.

Vor:

production: 
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

Nach dem:

production: 
  secret_key_base: string of charaters

Natürlich sollte das auf die Umgebungsvariable gesetzt werden, die ich später einstellen werde, aber dies hat es zumindest zum Laufen gebracht. Ich habe meinen String mit bundle exec rake secret erhalten.

12
Eric

Das hat mein Problem gelöst:

Fügen Sie den folgenden Code zu Ihrer Datei config/initializers/devise.rb hinzu. 

config.secret_key = '-- secret key --' 

Ersetzen Sie '- secret key--' durch Ihren eigenen Schlüssel. Ich empfehle es aus Sicherheitsgründen in einer ENV-Variablen zu speichern.

12

Könnte es sein, dass Sie Rails g devise:install nicht ausgeführt haben?

Das Ausführen von Rails generate devise User ohne den vorherigen Befehl verursacht dieses Problem.

10
sascha.daniels

In config/initializers/devise.rb stelle ich Folgendes ein: 

config.secret_key = ENV["SECRET_KEY_BASE"] if Rails.env.production?

Denn wenn Sie setzen:

$ heroku config

Sie sehen einen secret_key_base für den Modus production.

9
rld

Ich löse mein Initialisierungsproblem mit diesem hässlichen Ansatz:

config.secret_key = 'some1234keyq23' if Rails.env == 'production'

in config/initializers/devise.rb .__ Es funktioniert jetzt sowohl in der Produktion als auch in der Entwicklung!

6

Ich habe mein Repository von git auf eine neue Maschine geklont. Das 

config/secrets.yml 

die Datei war in meiner .gitignore-Liste, daher war diese Datei nicht vorhanden, und Devise erstellt die Datei nicht.

Ich fügte die Datei hinzu und lief erneut 

Rails generate devise MODEL

und es hat funktioniert.

5
jgrumps

Überprüfen Sie, ob Ihr config\initializers\secret_token.rb Folgendes hat:

YourAppName::Application.config.secret_token

Es sollte sein:

YourAppName::Application.config.secret_key_base
4
zurbergram

Ich habe das gleiche Problem. Das Problem wurde durch folgende Zeilen in routes.rb verursacht:

devise_for :users, :skip => [:registrations]                                                   
as :user do
  get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'              
  put 'users' => 'devise/registrations#update', :as => 'user_registration'                      
  get '/users/sign_out' => 'devise/sessions#destroy'                                            
end

Ich kommentierte sie und danach laufe ich:

$ Rails generate devise:install

Und es hat perfekt bewertet. Und danach habe ich unkommentierte Routen. 

4
ExiRe

Mit Rails 5.2.0 und Devise 4.4.1 hatten wir die gleichen Probleme

Legen Sie Folgendes in /config/initializers/devise.rb ab

config.secret_key = Rails.application.credentials.secret_key_base
1
Benny Paulino

Nun, ich habe diesen Beitrag verfolgt und fast alles hier versucht. Ich habe den Schlüssel zu devise.rb hinzugefügt. Aber ich bekam immer noch den gleichen Fehler.

Vielleicht eine blöde Antwort, aber alles, was ich tun musste, war, die devise.rb-Taste in das Repository zu drücken.

1
Philip John

Fix:

  1. Im Produktionsserver:

    Sudo -H nano /etc/environment
    
  2. Dann in der Datei hinzufügen:

    export SECRET_KEY_BASE="yourkey"
    export DEMO03_DATABASE_PASSWORD="yourpass"
    

    um dies dauerhaft festzulegen, und fügen Sie systemweit (alle Benutzer, alle Prozesse) die Set-Variable hinzu 

  3. In der lokalen Projektdatei devise.rb:

    config.secret_key = ENV["SECRET_KEY_BASE"] if Rails.env.production?
    

Technische Details:

  • Ubuntu 16.04
  • Entwickeln (4.2.0)
  • Schienen 5.0.1
  • capistrano (3.7.1)
1
gotqn

Der Versuch, eine etwas vollständigere Antwort auf die oben genannten zu geben: Wie in der Dokumentation von devise_auth_token gem erwähnt - Dokumentation - / 

Außerdem können Sie andere Aspekte von devise manuell konfigurieren Erstellen der traditionellen devise.rb-Datei unter config/initializers/devise.rb. Hier sind einige Beispiele, was Sie können in dieser Datei tun:

Devise.setup do |config|   
# The e-mail address that mail will appear to be sent from   
# If absent, mail is sent from "[email protected]"  
config.mailer_sender = "[email protected]"

# If using Rails-api, you may want to tell devise to not use ActionDispatch::Flash   
# middleware b/c Rails-api does not include it.   
# See: http://stackoverflow.com/q/19600905/806956  
config.navigational_formats = [:json] end

Ich hatte das gleiche Problem und wie hier erwähnt, habe ich den Devise-Initialisierer erstellt und die config.secret_key = ENV['DEVISE_SECRET_KEY']-Zeile hinzugefügt.

0
Amit Liber