devise秘密密钥没有设置

我正在开发一个Rails 4应用程序,使用Active Admin gem来pipe理后端。 Active Admin反过来使用Devise进行用户authentication。 现在,当我尝试在VPS服务器上使用capistrano部署应用程序时,出现以下错误:

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

谷歌search对这个错误没有太大的作用。 任何build议,为什么它是抛出一个错误? 我应该添encryption钥来devise初始值设定项,因为我找不到在initializers/devise.rb设置这样的设定项的initializers/devise.rb吗?

我今天早上运行了bundle update并开始得到相同的错误。

我将它作为config/initializers/devise.rb的一行添加,并且错误已修复。

这似乎是介绍它的承诺 。

对Rails 4.1来说,Devise 3.2.4在config / initializers / devise.rb中有效:

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

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

这解决了我的问题:

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

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

用你自己的密钥replace“ – 密钥 – ”。 为了安全起见,我build议将它存储在ENVvariables中。

按照更新日志 :

devise将使用Rails 4+应用程序上的secret_key_base作为其secret_key。 您可以通过更改devise.rb初始值设定项来更改它并使用您自己的秘密。

我去了config/secrets.yml并改变了产值。

之前:

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

后:

 production: secret_key_base: string of charaters 

当然,这应该被设置为环境variables,我将在后面设置,但是这至less会让它运行。 我使用bundle exec rake secret得到了我的string。

难道是,你没有运行rails g devise:install

运行rails generate devise User没有以前的命令确实会导致此问题。

config/initializers/devise.rb我把:

 config.secret_key = '<%= ENV["SECRET_KEY_BASE"] %>' if Rails.env == 'production' 

因为如果你把:

 $ heroku config 

你会看到模式productionsecret_key_base

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

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

在configuration/初始化/ devise.rb它现在工作在生产以及在开发中!

我有同样的问题。 问题是由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 

它已经完美评估。 之后,我没有注意到路线。

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

 YourAppName::Application.config.secret_token 

它应该是:

 YourAppName::Application.config.secret_key_base 

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

 config/secrets.yml 

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

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

 rails generate devise MODEL 

它的工作。

固定:

  1. 在生产服务器上:

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

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

    永久性地设置这个,系统范围(所有用户,所有进程)添加设置variables

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

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

技术细节:

  • Ubuntu 16.04
  • devise(4.2.0)
  • 铁轨5.0.1
  • capistrano(3.7.1)

试图给出一个更完整的回答上面的那些:正如devise_auth_token gem的文档中提到的

…另外,您可以通过在config/initializers/devise.rb手动创build传统的devise.rb文件来configurationdevise的其他方面。 以下是您可以在此文件中执行的一些示例:

 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'] ,我创build了devise初始值设定项,并将config.secret_key = ENV['DEVISE_SECRET_KEY']行添加到它。

那么,我一直在关注这个post,并尝试几乎所有的东西。 我已经添加了关键devise.rb 。 但是我仍然得到同样的错误。

也许一个愚蠢的答案,但我所要做的就是把devise.rb关键到存储库。