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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:01:45