如何在 Heroku 上的 Rails 6 应用程序上设置 RAILS_PRODUCTION_KEY 配置变量

vin*_*nce 4 heroku ruby-on-rails-6

我创建了一个新的 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`
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,我能够在设置RAILS_MASTER_KEY为生产密钥后使其工作

heroku config:unset RAILS_PRODUCTION_KEY
heroku config:set RAILS_MASTER_KEY=`cat config/credentials/production.key`
Run Code Online (Sandbox Code Playgroud)

如何让 HerokuRAILS_PRODUCTION_KEY在 Rails 6 应用程序中识别?

Ed *_*der 8

我也在努力弄清楚这个问题。(这不是Heroku 特定的问题。)

底线:命名的环境变量RAILS_PRODUCTION_KEY(或任何其他 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给定密钥 inconfig/credentials/production.yml.enc的值将覆盖该密钥 in的值config/credentials.yml.enc。这是不是这种情况。

这是它的实际工作方式:

  1. Rails 6 使用单个密钥来解密单个加密的机密文件。
  2. 解密密钥config/master.key的默认位置是 ,机密文件的默认位置是config/credentials.yml.enc
  3. 如果RAILS_MASTER_KEY定义了环境变量 of ,Rails 将从环境变量中读取解密密钥,而不是config/master.key
  4. 当在一个给定的Rails环境中运行(production/ development/等),如果相应的秘密文件中存在config/credentials(例如config/credentials/production.yml.enc),那么Rails会使用秘密文件,并且它会使用相应的解密密钥(例如config/credentials/production.key解密它。
  5. 如果RAILS_MASTER_KEY定义了环境变量 of ,Rails 将从环境变量中读取解密密钥,而不是从解密密钥文件中读取。注意:无论 Rails 环境如何,覆盖解密密钥文件的环境变量始终是 RAILS_MASTER_KEY.