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
关键到存储库。