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

Ruby on Rails部署Heroku后Stripe报No API key provided错误求助

问题核心原因

你遇到的报错属于Pay宝石的配置异常,而非原生Stripe SDK的问题,你目前只配置了原生Stripe的密钥,遗漏了Pay宝石本身的Stripe密钥配置,同时配置链路存在冗余可能导致读取失败。

排查步骤

  1. 首先验证生产环境变量读取状态,在本地终端执行以下命令进入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宝石未配置密钥导致的报错。

  1. 确认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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:54:03