【问题标题】:How to set RAILS_PRODUCTION_KEY config var on a Rails 6 app on Heroku如何在 Heroku 上的 Rails 6 应用程序上设置 RAILS_PRODUCTION_KEY 配置变量
【发布时间】:2020-08-29 00:20:06
【问题描述】:

我创建了一个新的 Rails 6 应用程序,由于它支持多环境凭据,我正在尝试使用 RAILS_PRODUCTION_KEY 配置变量并删除默认的 RAILS_MASTER_KEY

heroku config:unset RAILS_MASTER_KEY 
heroku config:set RAILS_PRODUCTION_KEY=`cat config/credentials/production.key`

但这不起作用,在将RAILS_MASTER_KEY 设置为生产密钥后,我能够让它工作

heroku config:unset RAILS_PRODUCTION_KEY
heroku config:set RAILS_MASTER_KEY=`cat config/credentials/production.key`

如何让 Heroku 在 Rails 6 应用程序中识别 RAILS_PRODUCTION_KEY

【问题讨论】:

  • 我想您自己已经找到了解决方案:只需通过将生产密钥分配给主密钥来欺骗 Heroku 使用它。还是您需要在 Heroku 上同时拥有这两个密钥?
  • 不,只是为了满足我的强迫症,将生产密钥 var 命名为 RAILS_PRODUCTION_KEY 但这很好用

标签: heroku ruby-on-rails-6


【解决方案1】:

我也很难弄清楚这个问题。 (这不是 Heroku 特有的问题。)

底线:一个名为 RAILS_PRODUCTION_KEY 的环境变量(或任何其他 Rails 环境风格的变量名称)不是一个东西——Rails 不会注意它。

从 Rails 6 凭据功能的(弱,IMO)Rails 文档中,我错误地假设生产密钥(在 RAILS_PRODUCTION_KEY 环境变量或 config/credentials/production.key 中)会解密config/credentials/production.yml.enc,主密钥(在 RAILS_MASTER_KEY 环境变量或 config/master.key 中)将解密 config/credentials.yml.enc并且 config/credentials/production.yml.enc 中给定密钥的值将覆盖config/credentials.yml.enc 中该键的值。情况不是

实际上是这样工作的:

  1. Rails 6 使用 single 密钥来解密 single 加密的机密文件。
  2. 解密密钥的默认位置是config/master.key,秘密文件的默认位置是config/credentials.yml.enc
  3. 如果定义了RAILS_MASTER_KEY 的环境变量,Rails 将从环境变量中读取解密密钥,而不是config/master.key
  4. 在给定的 Rails 环境(production/development/etc.)中运行时,如果在 config/credentials 中存在相应的机密文件(例如,config/credentials/production.yml.enc),那么 Rails 将使用 that secrets 文件only,它会使用相应的解密密钥(例如config/credentials/production.keyonly来解密它。
  5. 如果定义了RAILS_MASTER_KEY 的环境变量,Rails 将从环境变量中读取解密密钥,而不是从解密密钥文件中读取。注意:无论 Rails 环境如何,覆盖解密密钥文件的环境变量都是 always RAILS_MASTER_KEY

【讨论】:

  • 这就是答案。我还认为它按照您的想法工作,这就是它应该工作的方式,因为我觉得尝试在开发和生产中使用不同的密钥将是管理的一场噩梦,因为我想从开发中复制所有内容并覆盖一些生产中的东西......我的头已经在旋转了
  • 这个答案终于和这个答案一起为我解决了,stackoverflow.com/a/66092950/4408829
  • 天哪,谢谢!我刚刚花了几个小时试图弄清楚为什么 RAILS_PRODUCTION_KEY 没有做任何事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 2021-06-01
相关资源
最近更新 更多