我正在使用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
中设置此类配置密钥的地方吗?
答案 0 :(得分:85)
答案 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)
修正:
在生产服务器中:
sudo -H nano /etc/environment
然后在文件中添加:
export SECRET_KEY_BASE="yourkey"
export DEMO03_DATABASE_PASSWORD="yourpass"
永久设置,系统范围(所有用户,所有进程)添加设置变量
在本地项目devise.rb
文件中:
config.secret_key = ENV["SECRET_KEY_BASE"] if Rails.env.production?
技术细节:
答案 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"] %>'
此代码行解决了我的问题。