Rails生产环境配置Credentials后Stripe密钥无法读取该如何解决?
Rails生产环境Credentials正确配置方案
是的,生产环境必须配置对应的master key环境变量,因为密钥文件默认不会提交到代码仓库。
两种凭证模式的配置方法
1. 全局凭证模式(默认模式,未加--environment参数编辑)
- 你本地的
config/master.key是解密config/credentials.yml.enc的唯一密钥,该文件默认被加入.gitignore,不会随代码部署到生产环境 - 生产环境配置方法:添加环境变量
RAILS_MASTER_KEY,值为本地config/master.key文件里的32位字符串即可
2. 生产环境专属凭证模式(执行过rails credentials:edit --environment production)
- 该模式下凭证存储在
config/credentials/production.yml.enc,对应的解密密钥是config/credentials/production.key,同样默认被.gitignore排除 - 生产环境两种配置方式二选一:
- 将本地
config/credentials/production.key文件上传到生产环境对应路径 - 配置环境变量
RAILS_PRODUCTION_MASTER_KEY,值为该key文件的内容
- 将本地
常见问题排查
- 先在生产环境执行
rails c,输入Rails.application.credentials.stripe_live检查是否能正常输出密钥:- 如果输出为nil,说明密钥未正确解密,优先检查master key环境变量是否正确、是否能被Rails进程读取(注意部分web服务器如Nginx、Puma默认不会继承shell的环境变量,需要单独在服务配置中声明环境变量)
- 如果能输出正确值,说明是配置加载顺序问题:不要把Stripe密钥配置写在
config/environments/production.rb中,建议移到config/initializers/stripe.rb初始化文件,内容为:Stripe.api_key = Rails.application.credentials.stripe_live
- 检查
config/environments/production.rb中的config.require_master_key配置是否为true,该配置为false时会跳过master key校验,凭证读取失败也不会主动报错
内容的提问来源于stack exchange,提问作者CJG
相关产品推荐
相关产品推荐

