Ruby on Rails部署Heroku后Stripe报No API key provided错误求助
问题核心原因
你遇到的报错属于Pay宝石的配置异常,而非原生Stripe SDK的问题,你目前只配置了原生Stripe的密钥,遗漏了Pay宝石本身的Stripe密钥配置,同时配置链路存在冗余可能导致读取失败。
排查步骤
- 首先验证生产环境变量读取状态,在本地终端执行以下命令进入Heroku生产控制台:
heroku run rails c
依次执行以下命令确认各配置项的值:
# 确认Heroku环境变量是否正确配置 puts ENV['PRIVATE_KEY'] # 确认secrets.yml是否能正常读取环境变量 puts Rails.application.secrets.private_key # 确认原生Stripe SDK是否拿到密钥 puts Stripe.api_key # 确认Pay宝石是否拿到Stripe密钥(核心验证项) puts Pay.stripe.secret_key
如果上述最后一项输出为nil,即可确认是Pay宝石未配置密钥导致的报错。
- 确认Heroku配置变量生效状态,如果你是近期才添加的
PRIVATE_KEY和PUBLISHABLE_KEY变量,执行以下命令重启Heroku dyno确保配置生效:
heroku restart
解决方案
方案1(推荐,减少配置中转)
直接修改config/initializers/stripe.rb的生产环境配置,同时为Stripe SDK和Pay宝石赋值密钥:
if Rails.env.test? || Rails.env.development? Stripe.api_key = Rails.application.credentials.dig(:stripe, :private_key) Pay.stripe.secret_key = Rails.application.credentials.dig(:stripe, :private_key) Pay.stripe.publishable_key = Rails.application.credentials.dig(:stripe, :public_key) end if Rails.env.production? Stripe.api_key = ENV['PRIVATE_KEY'] Pay.stripe.secret_key = ENV['PRIVATE_KEY'] Pay.stripe.publishable_key = ENV['PUBLISHABLE_KEY'] end
修改后提交代码重新部署到Heroku即可解决问题。
方案2(保留现有secrets配置)
如果需要保留现有的secrets.yml配置逻辑,只需在config/initializers/pay.rb(如果文件不存在就新建)中添加以下配置:
Pay.setup do |config| config.stripe.secret_key = Rails.application.secrets.private_key config.stripe.publishable_key = Rails.application.secrets.public_key end
内容的提问来源于stack exchange,提问作者Warden
相关产品推荐
相关产品推荐

