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 
 你会看到模式production的secret_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 
它的工作。
固定:
- 
在生产服务器上: sudo -H nano /etc/environment
- 
然后在文件中添加: export SECRET_KEY_BASE="yourkey" export DEMO03_DATABASE_PASSWORD="yourpass"永久性地设置这个,系统范围(所有用户,所有进程)添加设置variables 
- 
在本地项目 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关键到存储库。