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
?
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.
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?
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
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
.
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é.
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.
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
.
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
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é.
Vérifiez si votre config\initializers\secret_token.rb
a:
YourAppName::Application.config.secret_token
CA devrait etre:
YourAppName::Application.config.secret_key_base
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.
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
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.
Réparer:
Dans le serveur de production:
Sudo -H nano /etc/environment
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
Dans le fichier de projet devise.rb
local:
config.secret_key = ENV["SECRET_KEY_BASE"] if Rails.env.production?
Détails techniques:
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']
.