Ruby on rails 未设置设计密钥
我正在为管理后端开发一个Rails 4应用程序,使用Active Admin gem。主动管理员反过来使用Desive进行用户身份验证。现在,当我尝试在VPS服务器上使用Ruby on rails 未设置设计密钥,ruby-on-rails,devise,Ruby On Rails,Devise,我正在为管理后端开发一个Rails 4应用程序,使用Active Admin gem。主动管理员反过来使用Desive进行用户身份验证。现在,当我尝试在VPS服务器上使用capistrano部署应用程序时,我得到以下错误: rake aborted! Devise.secret_key was not set. Please add the following to your Devise initializer: config.secret_key = '-- secret key --'
capistrano
部署应用程序时,我得到以下错误:
rake aborted!
Devise.secret_key was not set. Please add the following to your Devise initializer:
config.secret_key = '-- secret key --'
谷歌搜索并不能解决这个问题。有什么建议说明它为什么会抛出错误吗?我是否应该将密钥添加到
designe
初始值设定项,因为我在initializers/designe.rb
中找不到任何位置来设置这样的配置密钥?我今天早上运行了bundle update
,并开始出现相同的错误
我在config/initializers/develope.rb中将它添加为一行,错误被修复
这似乎是引入它的原因。我用这种丑陋的方法解决了我的初始化问题:
config.secret_key = 'some1234keyq23' if Rails.env == 'production'
在config/initializers/designe.rb中
它现在可以在生产和开发中使用 可能是您没有运行rails g design:install
运行
rails generate designe User
而不使用前面的命令确实会导致此问题。我也有同样的问题。问题是由路由中的这些行引起的。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
config.secret_key = ENV['DEVISE_SECRET_KEY'] if Rails.env.production?
我对它们进行了评论,然后我运行:
$ rails generate devise:install
它的评估是完美的。在那之后,我取消了对路线的注释 这解决了我的问题: 将下面的代码添加到您的config/initializers/designe.rb文件中
config.secret_key = '-- secret key --'
用您自己的密钥替换“--secret key--”。为了安全起见,我建议将其存储在一个ENV变量中。对于Rails 4+应用程序,密钥设置位置默认为config/initializers/secret_token.rb在Rails 4.1和designe 3.2.4上对我有效的是在
config/initializers/designe.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
config.secret_key = ENV['DEVISE_SECRET_KEY'] if Rails.env.production?
检查您的config\initializers\secret\u token.rb
是否有:
YourAppName::Application.config.secret_token
应该是:
YourAppName::Application.config.secret_key_base
根据:
Desive将使用基于Rails 4+应用程序的密钥作为其密钥。您可以通过更改designe.rb初始值设定项来更改此设置并使用自己的秘密
我转到config/secrets.yml
并更改了production
值
之前:
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
当然,这应该设置为环境变量,我稍后会设置,但这至少让它运行起来。我通过在config/initializers/designe.rb
中使用bundle exec rake secret
获得字符串,我输入:
config.secret_key = ENV["SECRET_KEY_BASE"] if Rails.env.production?
因为如果你把:
$ heroku config
您将看到模式生产的密钥库我将我的存储库从git克隆到一台新机器上。
config/secrets.yml
文件在我的.gitignore列表中,因此该文件不存在,Desive不创建该文件
我添加了文件,然后重新运行
rails generate devise MODEL
它成功了。好吧,我一直在关注这篇文章,并在这里尝试了几乎所有的东西。
我已将密钥添加到devisive.rb
。但我还是犯了同样的错误
也许是一个愚蠢的答案,但我所要做的就是将design.rb
键推到存储库中。试图对上述问题给出更完整的答案:
正如Desive_auth_token gem的
…此外,您可以手动配置Desive的其他方面
在创建传统的designe.rb文件
config/initializers/designe.rb
。以下是一些您可以使用的示例
请在此文件中执行以下操作:
我也遇到了同样的问题,就像这里提到的一样,我创建了designe初始值设定项,并在其中添加了config.secret\u key=ENV['designe\u secret\u key']
行。修复:
在生产服务器中:
sudo -H nano /etc/environment
然后在文件中添加:
export SECRET_KEY_BASE="yourkey"
export DEMO03_DATABASE_PASSWORD="yourpass"
要永久设置此值,请在系统范围内(所有用户、所有进程)添加set变量
在本地项目designe.rb
文件中:
config.secret_key = ENV["SECRET_KEY_BASE"] if Rails.env.production?
技术细节:
- Ubuntu 16.04
- 设计(4.2.0)
- rails 5.0.1
- 卡皮斯特拉诺(3.7.1)
Rails 5.2.0和Desive 4.4.1也遇到了同样的问题
将以下内容放入/config/initializers/designe.rb
config.secret_key = Rails.application.credentials.secret_key_base
我不知道正确的解决方案,但它正在发挥作用。你可以试试。我从GitLab帐户克隆了我的项目,当我在本地服务器上运行时,我收到一条错误消息:
rake中止!
未设置designe.secret_密钥。请在Desive初始值设定项中添加以下内容:
config.secret_key='--秘钥--'
打开config/initializers/designe.rb
并添加此行
config.secret\u key=''
这个代码行解决了我的问题 @mrbrdo yes该消息准确地告诉您缺少什么,但是当您打开designe.rb文件时,没有关于密钥的文档。另外,如果您正在运行新的安装,应用程序应该注意这一点。多亏了售票处的票,问题已经解决了。这是我的问题,但你怎么解决呢?创建用户后,应该可以重新运行“rails g Desive:install”。如果您使用git,请创建测试分支并尝试它。如果没有,就在你的项目副本上试试。这就是我的问题所在。在尝试创建用户表并迁移之前,我删除了该应用程序(我做得不多),并设计了用户。这解决了问题。这为我解决了Rails 5.0.0.beta4和Desive 4.1.1的相同问题,但我不知道为什么。我运行了一个diff,在我的designe.rb中,除了一个不同的密钥外,唯一改变的一行是+102:“config.streams=Rails.env.test??1:11”完美,谢谢。在建立新项目时遇到了这个问题,在创建我的第一个设计模型之前忘记了rails generate designe:install
。根据这个答案,注释掉routes中的design_for line,然后运行generate命令,它就工作了。我注释掉design_for
line,以获得我的rake db:migrate to work。。不知道为什么,很高兴知道。我理解,对于一个开源应用程序来说,将Desive密钥放在som中是一件非常糟糕的事情