Rails加密credentials配置正确但访问stripe密钥返回nil如何解决
问题解决方法
核心错误原因
YAML配置存在规则冲突:YAML语法不允许重复定义同级同名键,你连续三次定义了顶级stripe键,前两次的development、test环境配置会被最后一次的production配置完全覆盖,导致非production环境读取不到对应配置、production环境也会因为调用路径和残留配置结构不匹配返回空值。
第一步:修复credentials配置
修改你的credentials文件,把三套stripe配置合并为同一个stripe顶级键下的子节点,正确配置如下:
# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies. secret_key_base: 1234567890 stripe: development: stripe_public_key: pk_test_1234567890 stripe_secret_key: sk_test_1234567890 test: stripe_public_key: pk_test_1234567890 stripe_secret_key: sk_test_1234567890 production: stripe_public_key: pk_live_1234567890 stripe_secret_key: sk_live_1234567890
保存修改后重新执行rails credentials:show确认配置结构正常。
第二步:调用凭证
你之前第二种调用写法逻辑完全正确,配置修复后直接使用即可正常读取:
const stripe = Stripe("<%= Rails.application.credentials.stripe[Rails.env.to_sym][:stripe_public_key] %>")
可选验证步骤
如果修改后依旧读取失败,可以通过Rails控制台快速定位问题:
- 执行命令启动对应环境的Rails控制台:
rails c -e 对应环境名(development/test/production) - 执行读取命令验证:
Rails.application.credentials.stripe.dig(Rails.env.to_sym, :stripe_public_key)
如果控制台返回对应密钥值,说明配置读取链路正常,问题出在视图渲染环节;如果返回nil,检查对应环境的config.require_master_key配置是否生效、master.key文件是否存在且权限正常。
内容的提问来源于stack exchange,提问作者sandypockets
相关产品推荐
相关产品推荐

