You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails应用部署Fly.io失败:Stripe密钥为nil导致预编译报错

解决Fly.io部署Rails时assets:precompile无法读取Stripe凭证的问题

问题根源

Fly.io执行assets:precompile构建环节时,默认不会加载RAILS_MASTER_KEY对应的credentials文件,导致config/initializers/stripe.rb里调用Rails.application.credentials.stripe时返回nil,触发NoMethodError。

可行修复方案

方案1:让资产预编译任务强制加载credentials

在项目根目录的Rakefile中添加这段代码,增强assets:precompile任务的执行逻辑:

Rake::Task["assets:precompile"].enhance do
  Rails.application.load_credentials
end

方案2:拆分密钥与公钥的加载方式(推荐)

资产预编译通常只用到Stripe公钥,这个密钥无需保密,可以直接用环境变量传递:

  1. 在Fly.io控制台配置STRIPE_PUBLISHABLE_KEY环境变量
  2. 前端引用公钥时直接读取环境变量:
    <%= tag.meta name: "stripe-publishable-key", content: ENV["STRIPE_PUBLISHABLE_KEY"] %>
    
  3. 后端初始化Stripe密钥的逻辑保留,同时兼容环境变量(防止极端情况):
    Stripe.api_key = Rails.application.credentials.dig(:stripe, :secret) || ENV["STRIPE_SECRET_KEY"]
    

方案3:在Fly.io构建阶段注入RAILS_MASTER_KEY

修改fly.toml的[build]区块,让构建过程能访问到密钥:

[build]
  [build.args]
    RAILS_MASTER_KEY = "${RAILS_MASTER_KEY}"

验证方法

  • 本地模拟生产环境预编译:RAILS_ENV=production RAILS_MASTER_KEY=你的密钥字符串 bundle exec rails assets:precompile,确认无报错
  • 部署后通过fly logs查看应用启动日志,确认Stripe初始化正常

内容的提问来源于stack exchange,提问作者blainefreestone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 19:02:35