heroku - 如何在 Heroku 上的 Rails 6 应用程序上设置 RAILS_PRODUCTION_KEY 配置变量
问题描述
我创建了一个新的 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`
如何让 HerokuRAILS_PRODUCTION_KEY
在 Rails 6 应用程序中识别?
解决方案
我也很难弄清楚这个问题。(这不是Heroku 特有的问题。)
底线:命名的环境变量RAILS_PRODUCTION_KEY
(或任何其他 Rails 环境风格的变量名)不是一个东西——Rails 不注意它。
从 Rails 6 凭据功能的(弱,IMO)Rails 文档中,我错误地假设生产密钥(在RAILS_PRODUCTION_KEY
env 变量或中config/credentials/production.key
)将解密config/credentials/production.yml.enc
,主密钥(在RAILS_MASTER_KEY
env 变量或中config/master.key
)将解密config/credentials.yml.enc
,并且给定密钥 inconfig/credentials/production.yml.enc
的值将覆盖该密钥 in 的值config/credentials.yml.enc
。事实并非如此。
这就是它的实际工作方式:
- Rails 6 使用单个密钥来解密单个加密的机密文件。
- 解密密钥
config/master.key
的默认位置是,秘密文件的默认位置是config/credentials.yml.enc
. - 如果
RAILS_MASTER_KEY
定义了环境变量,Rails 将从环境变量中读取解密密钥,而不是从config/master.key
. - 在给定的 Rails 环境(//etc.)中运行时
production
,如果(例如, )development
中存在对应的 secrets 文件,那么 Rails 将只使用该secrets 文件,并且仅使用对应的解密密钥(例如, )进行解密它。config/credentials
config/credentials/production.yml.enc
config/credentials/production.key
- 如果
RAILS_MASTER_KEY
定义了环境变量,Rails 将从环境变量中读取解密密钥,而不是从解密密钥文件中读取。注意:无论 Rails 环境如何,覆盖解密密钥文件的环境变量始终RAILS_MASTER_KEY
是.
推荐阅读
- mysql - mysql vs redis 用于对话(聊天)?
- swift - Swift MetalKit 未知返回类型 MTKMesh.newMeshes
- powershell - 在 Powershell 中使用字符串中的 csv 记录
- c# - 重放 BufferedWaveProvider
- c++ - 将“ifstream”对象的一部分作为“istream”提供服务
- python - pymongo 3.6.1 抛出错误 InvalidURI: The empty string is not valid username
- git - 将所有已完成的替换更改为其他内容
- amazon-web-services - Error with vagrant up for aws
- css - WordPress子主题样式并不总是有效
- java - 如何在 Maven 构建期间替换 Java 程序中的构建值