如何在Heroku中更新RAILS_MASTER_KEY以适配production.yml.enc?
解决Heroku更新RAILS_MASTER_KEY的鸡生蛋困境
方案一:新增生产环境专属密钥变量(推荐)
Rails 6+支持多环境credentials,可通过独立变量避免冲突:
- 在Heroku终端执行:
heroku config:set RAILS_PRODUCTION_KEY=你的production.key文件内容 - 代码中生产环境的密钥调用改为
Rails.application.credentials.production[:密钥名],确保只加载production.yml.enc的内容 - 原有
RAILS_MASTER_KEY可保留,用于解密credentials.yml.enc(仅开发环境使用) - 直接推送代码部署,此时生产环境会自动用
RAILS_PRODUCTION_KEY解密production.yml.enc,无需修改原有密钥,避免解密冲突
方案二:彻底切换到生产环境credentials
如果不需要保留旧的credentials.yml.enc:
- 本地操作:将
credentials.yml.enc中的生产环境密钥全部迁移到production.yml.enc,然后清空或删除credentials.yml.enc - 设置新密钥:执行
heroku config:set RAILS_MASTER_KEY=你的production.key文件内容 - 临时跳过依赖旧credentials的发布任务:
- 终端执行
heroku config:set SKIP_CREDENTIALS_CHECK=true,然后在代码的发布脚本(如bin/rails release)中添加判断:若该变量存在,则跳过需要解密旧credentials的操作 - 推送代码部署,成功后执行
heroku config:unset SKIP_CREDENTIALS_CHECK恢复正常流程
- 终端执行
关键注意事项
- 本地先验证
production.yml.enc和production.key配对正确:执行RAILS_ENV=production rails credentials:show,能正常显示内容则没问题 - Heroku配置变量设置后即时生效,部署失败不会自动回滚变量,若出现解密错误,优先检查代码中密钥的调用路径是否正确
内容的提问来源于stack exchange,提问作者João Souza
相关产品推荐
相关产品推荐

