web-dev-qa-db-fra.com

Devise Secret Key n'a pas été défini

Je développe une application Rails 4 à l'aide de la gem Active Admin pour l'administration. Active Admin utilise à son tour Devise pour l'authentification de l'utilisateur. Maintenant, lorsque j'essaie de déployer l'application à l'aide de capistrano sur le serveur VPS, j'obtiens l'erreur ci-dessous:

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

Une recherche sur Google ne fait pas beaucoup pour cette erreur. Des suggestions pourquoi il jette une erreur? Dois-je ajouter la clé secrète à devise initializer, car je ne trouve aucun endroit pour définir une telle clé de configuration dans initializers/devise.rb?

96
user1139144

J'ai exécuté bundle update ce matin et j'ai commencé à avoir la même erreur.

Je l'ai ajouté en tant que ligne dans config/initializers/devise.rb et l'erreur a été corrigée. 

Cela semble être le commit qui l'a introduit.

85
Brian

Ce qui a fonctionné pour moi sur Rails 4.1 et Devise 3.2.4 est dans config/initializers/devise.rb:

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

A partir de Devise 3.2.3 pour les applications Rails 4+, l'emplacement de configuration de la clé par défaut est YourAppName :: Application.config.secret_key_base trouvé dans config/initializers/secret_token.rb

31
Brandon Cook

Selon changelog :

Devise utilisera la secret_key_base sur les applications Rails 4+ comme secret_key. Vous pouvez changer cela et utiliser votre propre secret en changeant l'initialiseur Budget.rb.

Je suis allé à config/secrets.yml et j'ai changé la valeur production.

Avant:

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

Après:

production: 
  secret_key_base: string of charaters

Bien sûr, cela devrait être défini sur la variable d'environnement, que je définirai plus tard, mais au moins, cela a fonctionné. J'ai eu ma chaîne en utilisant bundle exec rake secret.

12
Eric

Cela a résolu mon problème:

Ajoutez le code ci-dessous à votre fichier config/initializers/devise.rb

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

Remplacez "clé secrète" par votre propre clé. Je recommande de le stocker dans une variable ENV pour des raisons de sécurité.

12

Se pourrait-il que vous n'ayez pas exécuté Rails g devise:install?

Exécuter Rails generate devise User sans la commande précédente est à l'origine de ce problème.

10
sascha.daniels

Dans config/initializers/devise.rb je mets: 

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

Parce que si vous mettez:

$ heroku config

Vous verrez un secret_key_base pour le mode production.

9
rld

Je résous mon problème d'initialiseur avec cette approche laide:

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

dans config/initializers/devise.rb Il fonctionne maintenant aussi bien en production qu'en développement

6
Andrey Yasinishyn

J'ai cloné mon référentiel sur une nouvelle machine de git. le 

config/secrets.yml 

le fichier était dans ma liste .gitignore, ce fichier n'existait donc pas et Devise ne le crée pas.

J'ai ajouté le fichier, puis re-couru 

Rails generate devise MODEL

et cela a fonctionné.

5
jgrumps

Vérifiez si votre config\initializers\secret_token.rb a:

YourAppName::Application.config.secret_token

CA devrait etre:

YourAppName::Application.config.secret_key_base
4
zurbergram

J'ai le même problème. Le problème était dû à ces lignes dans routes.rb:

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

Je les ai commentés et après ça j'ai couru:

$ Rails generate devise:install

Et il a parfaitement évalué. Et après cela, j'ai des itinéraires non commentés. 

4
ExiRe

J'ai eu le même problème avec Rails 5.2.0 et Devise 4.4.1

Déposez les éléments suivants dans /config/initializers/devise.rb

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

Eh bien, j'ai suivi ce post et essayé presque tout ici ..__ J'ai ajouté la clé à devise.rb. Mais je continuais à avoir la même erreur.

Peut-être une réponse stupide, mais tout ce que je devais faire était de pousser la clé devise.rb dans le référentiel.

1
Philip John

Réparer:

  1. Dans le serveur de production:

    Sudo -H nano /etc/environment
    
  2. Ensuite, dans le fichier, ajoutez:

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

    pour le définir de manière permanente et à l’échelle du système (tous les utilisateurs, tous les processus), ajoutez une variable 

  3. Dans le fichier de projet devise.rb local:

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

Détails techniques:

  • Ubuntu 16.04
  • Devise (4.2.0)
  • Rails 5.0.1
  • capistrano (3.7.1)
1
gotqn

Essayer de donner une réponse un peu plus complète à celles mentionnées ci-dessus: Comme mentionné dans le schéma_auth_token gem's documentation

... De plus, vous pouvez configurer manuellement d’autres aspects du système création du fichier classique.rb à l’adresse config/initializers/devise.rb. Voici quelques exemples de ce que vous pouvez faire dans ce fichier:

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

J'ai eu le même problème et, comme expliqué ici, j'ai créé l'initialiseur de carte et y ai ajouté la ligne config.secret_key = ENV['DEVISE_SECRET_KEY'].

0
Amit Liber