Ruby on rails 未设置设计密钥

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 --'

我正在为管理后端开发一个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 --'

谷歌搜索并不能解决这个问题。有什么建议说明它为什么会抛出错误吗?我是否应该将密钥添加到
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中是一件非常糟糕的事情