Ruby on Rails集成Stripe报错:未提供API密钥
我之前在Rails项目集成Stripe时也碰到过一模一样的问题——表单显示正常,但创建charge时突然弹出"No API key provided"的报错,明明初始化文件里已经配置好密钥了对吧?别慌,咱们一步步排查:
先确认初始化文件的位置和加载时机:你的
stripe.rb是不是放在config/initializers目录下?Rails只会自动加载这个目录下的初始化文件,如果放错了位置,那里面的Stripe.api_key = ...代码根本没执行。改完位置一定要重启服务器!验证密钥是否真的被读取到了:在
charges#create动作开头加几行调试代码,看看实际拿到的密钥是什么:puts "当前Stripe API密钥: #{Stripe.api_key.inspect}" puts "Secrets里的密钥: #{Rails.application.secrets.stripe_secret_key.inspect}"然后查看服务器日志,如果输出是
nil,那问题出在密钥加载环节——要么是secrets.yml里对应环境(比如development/production)的密钥没配置,要么是部署时环境变量没传对(比如用了Figaro或dotenv但变量名写错了)。临时应急+排查覆盖问题:如果着急解决,可以先在
charges#create动作开头手动设置一次密钥:Stripe.api_key = Rails.application.secrets.stripe_secret_key # 再执行Stripe::Charge.create的逻辑如果这样就正常了,说明之前的初始化代码没生效,或者某个地方把
Stripe.api_key给覆盖成nil了,比如有没有其他控制器/初始化文件不小心修改了这个值?检查Stripe SDK版本:有些较老的Stripe Ruby版本对密钥加载逻辑有差异,试试把Gemfile里的stripe gem更新到最新稳定版,执行
bundle update stripe后重启服务器再测试。
内容的提问来源于stack exchange,提问作者albin persson

