100

我正在为管理后端使用 Active Admin gem 开发 Rails 4 应用程序。Active Admin 反过来使用 Devise 进行用户身份验证。现在,当我尝试在 VPS 服务器上部署应用程序capistrano时,我收到以下错误:

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

谷歌搜索对这个错误没有多大作用。有什么建议为什么会引发错误?我应该将密钥添加到devise初始化程序,因为我找不到任何地方来设置这样的配置密钥initializers/devise.rb吗?

4

16 回答 16

87

bundle update今天早上跑了,开始遇到同样的错误。

我将其添加为一行config/initializers/devise.rb并修复了错误。

这似乎是引入它的提交。

于 2013-08-06T17:51:00.537 回答
38

在 Rails 4.1 和 Devise 3.2.4 上对我有用的是config/initializers/devise.rb

config.secret_key = ENV['DEVISE_SECRET_KEY'] if Rails.env.production?
于 2014-08-13T14:01:30.553 回答
33

从针对 Rails 4+ 应用程序的Devise 3.2.3开始,密钥设置位置默认为config/initializers/secret_token.rb 中的YourAppName::Application.config.secret_key_base

于 2014-03-22T22:12:14.197 回答
12

这解决了我的问题:

将以下代码添加到您的config/initializers/devise.rb文件中。

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

用您自己的密钥替换“-- 密钥--”。出于安全目的,我建议将其存储在 ENV 变量中。

于 2013-11-28T20:07:42.403 回答
12

根据变更日志

Devise 将使用 Rails 4+ 应用程序上的 secret_key_base 作为其 secret_key。您可以通过更改 devise.rb 初始化程序来更改此设置并使用您自己的密码。

我去了config/secrets.yml并更改了production值。

前:

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

后:

production: 
  secret_key_base: string of charaters

当然,这应该设置为环境变量,我稍后会设置,但这至少让它运行起来。我通过使用得到了我的字符串bundle exec rake secret

于 2015-09-11T14:28:44.213 回答
10

莫非,你没跑rails g devise:install

在没有上一个命令的情况下运行rails generate devise User确实会导致此问题。

于 2013-10-14T21:01:46.967 回答
10

config/initializers/devise.rb我输入:

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

因为如果你把:

$ heroku config

您将看到secret_key_basemode production

于 2015-10-10T20:22:25.960 回答
6

我用这种丑陋的方法解决了我的初始化程序问题:

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

在 config/initializers/devise.rb 它现在可以在生产和开发中使用!

于 2013-09-13T17:11:53.700 回答
6

我从 git 将我的存储库克隆到一台新机器上。这

config/secrets.yml 

文件在我的 .gitignore 列表中,因此该文件不存在,并且 Devise 不会创建该文件。

我添加了文件,然后重新运行

rails generate devise MODEL

它奏效了。

于 2016-03-24T21:09:48.163 回答
5

检查您config\initializers\secret_token.rb是否有:

YourAppName::Application.config.secret_token

它应该是:

YourAppName::Application.config.secret_key_base
于 2014-10-22T23:27:10.313 回答
4

我有同样的问题。问题是由以下几行引起的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

我评论了他们,然后我运行:

$ rails generate devise:install

它已经完美地评估了。之后我取消了路线的注释。

于 2013-11-24T10:29:11.487 回答
1

好吧,我一直在关注这篇文章,并在这里尝试了几乎所有东西。我已将密钥添加到devise.rb. 但我仍然遇到同样的错误。

也许一个愚蠢的答案,但我所要做的就是将devise.rb密钥推送到存储库。

于 2016-05-31T07:27:37.560 回答
1

使固定:

  1. 在生产服务器中:

    sudo -H nano /etc/environment
    
  2. 然后在文件中添加:

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

    永久设置它,并在系统范围内(所有用户,所有进程)添加设置变量

  3. 在本地项目devise.rb文件中:

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

技术细节:

  • Ubuntu 16.04
  • 设计(4.2.0)
  • 轨道 5.0.1
  • 卡皮斯特拉诺 (3.7.1)
于 2017-01-18T22:36:05.353 回答
1

Rails 5.2.0 和 Devise 4.4.1 遇到了同样的问题

将以下内容放入 /config/initializers/devise.rb

config.secret_key = Rails.application.credentials.secret_key_base
于 2018-03-09T23:39:47.037 回答
0

试图对上述问题给出更完整的答案:如 devise_auth_token gem's documentation中所述

...此外,您可以通过手动创建传统的 devise.rb 文件来配置设计的其他方面 config/initializers/devise.rb。以下是您可以在此文件中执行的操作的一些示例:

Devise.setup do |config|   
# The e-mail address that mail will appear to be sent from   
# If absent, mail is sent from "please-change-me-at-config-initializers-devise@example.com"  
config.mailer_sender = "support@myapp.com"

# 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

我遇到了同样的问题,就像在这里提到的那样,我创建了设计初始化程序,并将该config.secret_key = ENV['DEVISE_SECRET_KEY']行添加到其中。

于 2016-08-31T15:49:51.233 回答
-1

我不知道正确的解决方案,但它正在工作。你可以试试看。我从我的 GitLab 帐户中克隆了我的项目,当我在本地服务器上运行时,我收到一条错误消息:

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

打开config/initializers/devise.rb并添加这一行

config.secret_key = '<%= ENV["SECRET_KEY_BASE"] %>'

此代码行解决了我的问题。

于 2018-07-31T08:55:58.697 回答