Rails5集成Figaro后Stripe密钥加载报错:main:Object (NameError)
解决Rails 5集成Figaro后Stripe密钥加载失败的问题
看起来你遇到的问题主要是两个小细节出错了——中文引号误用和ERB模板里的写法错误,咱们一步步来修复:
核心错误分析
控制台报错undefined local variable or method “STRIPE_PUBLISHABLE_KEY”',本质原因是:
- 你代码里用了中文双引号(
“”),Ruby会把这种引号包裹的内容识别为局部变量名,而不是ENV变量的键名 - ERB模板里的写法逻辑错误,
Rails.configuration.stripe[:ENV["STRIPE_PUBLISHABLE_KEY"]]是无效的语法
修正后的代码
1. 修复config/initializers/stripe.rb
把所有中文引号换成英文双引号,确保ENV变量能被正确读取:
Rails.configuration.stripe = { :publishable_key => ENV["STRIPE_PUBLISHABLE_KEY"], :secret_key => ENV["STRIPE_SECRET_KEY"] } Stripe.api_key = Rails.configuration.stripe[:secret_key]
2. 修复Payment.html.erb中的Stripe初始化代码
你有两种正确的写法可选:
写法一:直接读取ENV变量
<script> $(function() { var stripe = Stripe('<%= ENV["STRIPE_PUBLISHABLE_KEY"] %>'); var elements = stripe.elements(); // 你的其他表单逻辑代码 }); </script>
写法二:使用Rails预配置的stripe哈希(和你之前成功的写法逻辑一致)
<script> $(function() { var stripe = Stripe('<%= Rails.configuration.stripe[:publishable_key] %>'); var elements = stripe.elements(); // 你的其他表单逻辑代码 }); </script>
额外检查步骤(避免遗漏Figaro配置)
- 确认你已经执行了
figaro install:这个命令会自动生成config/application.yml并将其加入.gitignore,确保密钥不会被提交到版本库 - 必须重启Rails服务器:修改配置文件后,只有重启服务器才能加载新的ENV变量
- 核对
application.yml里的内容:确保变量名和代码里完全一致,密钥是英文双引号包裹,没有拼写错误STRIPE_SECRET_KEY: "sk_test_UW12345678910t" STRIPE_PUBLISHABLE_KEY: "pk_test_Fv1234567890p"
做完这些修改后,重新启动服务器,应该就能正常加载Stripe密钥,表单也能正常工作了。
内容的提问来源于stack exchange,提问作者Zurch
相关产品推荐
相关产品推荐

