没有设置Devise Secret Key

时间:2013-08-06 12:58:50

标签: ruby-on-rails devise

我正在使用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 --'

Google搜索对此错误没有太大作用。有什么建议为什么它会抛出错误?我应该将密钥添加到devise初始化程序,因为我找不到在initializers/devise.rb中设置此类配置密钥的地方吗?

16 个答案:

答案 0 :(得分:85)

今天早上我跑bundle update并开始收到同样的错误。

我在config/initializers/devise.rb中将其添加为一行,错误已修复。

这似乎是引入它的commit

答案 1 :(得分:38)

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

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

答案 2 :(得分:31)

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

答案 3 :(得分:12)

这解决了我的问题:

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

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

用您自己的密钥替换' - secret key--'。为了安全起见,我建议将其存储在ENV变量中。

答案 4 :(得分:12)

根据changelog

  

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得到了我的字符串。

答案 5 :(得分:10)

可能是,你没有运行rails g devise:install

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

答案 6 :(得分:9)

config/initializers/devise.rb中我放了:

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

因为如果你把:

$ heroku config

您会看到模式secret_key_base的{​​{1}}。

答案 7 :(得分:6)

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

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

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

答案 8 :(得分:5)

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

YourAppName::Application.config.secret_token

应该是:

YourAppName::Application.config.secret_key_base

答案 9 :(得分:5)

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

config/secrets.yml 

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

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

rails generate devise MODEL

并且有效。

答案 10 :(得分: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

它已经完美评估了。之后,我取消了评论路线。

答案 11 :(得分:1)

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

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

答案 12 :(得分: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?
    
  4. 技术细节:

    • Ubuntu 16.04
    • Devise(4.2.0)
    • rails 5.0.1
    • capistrano(3.7.1)

答案 13 :(得分:1)

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

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

config.secret_key = Rails.application.credentials.secret_key_base

答案 14 :(得分:0)

尝试给出一些更完整的答案: 正如devise_auth_token gem 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']行。

答案 15 :(得分:-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"] %>'

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

相关问题