如何在Rails 7中获取credentials.yml.enc中的自定义环境变量?
Rails 7 自定义Credentials变量无法读取的解决方法
核心问题:读取方式错误
你不能直接用 Rails.application.new_key 读取自定义变量,必须通过 Rails.application.credentials 对象访问,正确写法是:
Rails.application.credentials.new_key
排查与修复步骤
确认credentials是否正确保存
- 执行
EDITOR='code --wait' rails credentials:edit后,必须保存并完全关闭编辑器,--wait参数会等待编辑器关闭才会加密更新credentials.yml.enc文件,中途关闭可能导致修改未生效。 - 检查项目根目录下的
master.key文件是否存在,且权限设置为600(执行chmod 600 master.key),权限过高会导致Rails无法正常解密credentials。
- 执行
在控制台验证变量是否存在
打开Rails控制台(执行rails c),依次执行以下命令排查:# 查看所有已加载的credentials键值对 Rails.application.credentials.to_h # 尝试直接读取自定义变量 Rails.application.credentials.new_key如果输出里能看到
new_key: "qwerty",说明变量已正确加载,否则需要重新编辑保存credentials。多环境credentials的情况
如果你是给特定环境(比如production)添加变量,需要编辑对应环境的credentials文件:EDITOR='code --wait' rails credentials:edit --environment production读取时无需额外指定环境(Rails会自动匹配当前运行环境),直接用
Rails.application.credentials.new_key即可。部署环境的注意事项
- 生产环境不要提交
master.key到代码仓库,应该通过设置RAILS_MASTER_KEY环境变量来提供解密密钥。 - 确保部署环境的
RAILS_ENV配置正确,避免读取了错误环境的credentials。
- 生产环境不要提交
内容的提问来源于stack exchange,提问作者AVLESSI Matchoudi
相关产品推荐
相关产品推荐

