缺少“生产”环境的secret_key_base,

时间:2018-07-22 16:03:57

标签: ruby-on-rails ruby-on-rails-5 ruby-on-rails-5.2

我简直无法超越信息

  

在“生产”环境中缺少secret_key_base,请使用rails credentials:edit设置此字符串(ArgumentError)

我在这里有rails 5.2.0。跑EDITOR=vim rails credentials:edit和里面:

production:
   secret_key_base: xxxxxxxxxxxxxxxxxxxxxxx

保存,然后在终端RAILS_ENV=production rails c

我想念什么吗?香港专业教育学院重新启动服务器,同样的问题。开发模式没问题。

8 个答案:

答案 0 :(得分:8)

Rails 5.2.0需要针对生产环境的额外阶段:

config.require_master_key = true    # in config/environments/production.rb

没有它,Rails仍然会使用旧式secret.yml机制(目前)。

Engine Yard的Christopher Rigor has written a concise post on it。相关文章:

  

读取凭据

     

如果要在生产环境中使用凭据,请将以下内容添加到config/environments/production.rb

config.require_master_key = true

一本好书,也可以看到正面和背面。

注意:正如@TomDogg所发现的,Rails 5.2.1似乎又有所不同,因此此答案可能仅适用于5.2.0。

答案 1 :(得分:6)

保留默认的secrets.yml文件

# config/secrets.yml
production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
  

RAILS_ENV =生产SECRET_KEY_BASE = production_test_key导轨c

答案 2 :(得分:3)

凭据文件中没有production: development:test:环境标记。 DHH帖子中的更多信息:https://github.com/rails/rails/pull/30067

所以直接写

secret_key_base: xxxxxxxxxxxxxxxxxxxxxxx

请不要将主密钥与秘密密钥库混淆。主密钥用于打开凭据加密文件。

切换到先前的机密系统既不是解决方案,也不是公认的答案。

答案 3 :(得分:3)

Secret_key_base设置不正确。 这是一个没有引起足够重视的已知问题:https://github.com/rails/rails/issues/32947

生成密钥:

EDITOR=vim rails credentials:edit

记录密钥。 保存在config/master.key中。

SECRET_KEY_BASE=`cat config/master.key` bin/rails assets:precompile

这是我来到的解决方案。我真的不喜欢被强迫通过环境变量来放置它。如果有人有更多关于master.key以及此类工作的信息引起我注意,请发表评论。

答案 4 :(得分:2)

避免将secret_key_base放在环境标记下。放在上面。

这是错误的:

app.post('/', [
      //Other validations
     .custom((value, {req}) => {
         connection.query(
      //SQL query
         if(results.length){
          // Duplication possibility here, hence I want to return a custom message
         // via express validator

      }
   )
  // SQL query ends here
  }
 )
], (req, res) => { 
        const errors = validationResult(req);
    if (!errors.isEmpty()) {
    return res.status(422).json({ errors: errors.array() });
    }
}

尝试以下方法:

production:
   secret_key_base: xxxxxxxxxxxxxxxxxxxxxxx
   some_other_key: xxx

答案 5 :(得分:1)

在生产环境中使用Rails 5.2应用程序时,我遇到了同样的问题。

我已经设置了其他东西。对我来说,问题不是不是secret_key_base的设置不正确,而是因为不赞成将环境名称作为常规参数传递,如下所示

rails c RAILS_ENV=production

如果您仔细查看错误日志,它是从顶部开始生成的,则您将看到以下内容:

DEPRECATION警告:不建议将环境名称作为常规参数传递,并将在下一个Rails版本中将其删除。请改用-e选项。 (从bin / rails:9调用)

要在其他环境中运行rails控制台,请使用-e选项,如下所示:

rails console -e production

注意:在secret_key_base文件中设置secrets.yml是不安全的,因为这不是安全的密钥存储方式,请使用加密的{{1} }文件和credential.yml解密。

仅此而已。

我希望这会有所帮助

答案 6 :(得分:0)

使用Dockerfile将Rails应用程序部署到dokku时遇到了这个问题。我的解决方案:

文件config/secrets.yml引用了一个环境变量:

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

我需要使用dokku命令行(直接在服务器上,或者在我的开发机上使用dokku-cli gem)设置此变量:

dokku config:set SECRET_KEY_BASE=blalbalblablahblablah

答案 7 :(得分:-2)

config / credentials.yml.enc:

list

还要确保您遵守所有YAML缩进规则(仅2个空格),因为这样做没有成功,所以我对该文件的make加载会自动失败。