javascript - 在生产中使用 dotenv,还是将 env 变量传递给 js/js.erb?并尝试使用凭据
问题描述
我正在尝试将我的条带可发布密钥的 ENV 变量传递给 Connect 的 stripe.js 文件。
Dotenv 宝石:
gem 'dotenv-rails', groups: [:development, :test, :production]
我将它添加到我的 dotenv gem .env 文件中:
STRIPE_PUBLISHABLE_KEY=pk_test_xxxxxxxxxx
STRIPE_SECRET_KEY=sk_test_xxxxxxxxxx
然后添加到我的 stripe.js.erb 文件中:
var stripe = Stripe("<%= ENV['STRIPE_PUBLISHABLE_KEY']%>");
将 stripe.js 更改为 stripe.js.erb 在本地工作,但 ENV 似乎在生产中不起作用。在 Heroku 变量中,我设置了它。如果我直接在 stripe.js/.js/erb 中传递密钥,它将起作用,所以无论如何,ENV 在生产过程中不起作用。
即使我将代码带入带有标签的视图中,除非我直接将密钥传递进去,否则它也不会起作用。
我在 herokus 方面没有收到任何错误。
我也尝试使用凭据:
stripe:
stripe_publishable_key: pk_test_x
stripe_secret_key: sk_test_x
在我的 stripe.js/.js.erb 文件中使用这个:
var stripe = Stripe('<%= Rails.application.credentials.dig(:stripe, :stripe_publishable_key) %>');
(我使用这种精确的格式进行主动存储和工作并尝试:
var stripe = Stripe('<%= Rails.application.credentials.stripe[:stripe_publishable_key] %>');
有了这些,我在推送到 heroku 时收到以下错误:
NoMethodError: nil:NilClass 的未定义方法“[]”
问题:如何将 ENV 变量传递给生产环境?
使用 .erb 解决了这个问题,但现在的问题是 ENV 文件未达到生产。
解决方案
我认为您RAILS_MASTER_KEY
在使用凭证方法时忘记在 Heroku 应用程序中设置环境变量。从您的代码库中为其分配内容master.key
。
推荐阅读
- python - 如何在 python 中使用 SKLearn 对多项逻辑回归进行假设检验?
- laravel - 在 spatie/media-library 的转换中对 PNG 的透明度支持
- ios - UIView:在相同的给定方向上无限动画渐变?
- r - 当响应为多个数值时,如何处理stablelearner的函数stabletre?
- .net-core - 从开发环境切换到托管在 Azure 应用服务上的生产环境 Blazor WASM 时出现问题
- google-cloud-platform - 如何向谷歌存储桶添加空间?
- php - 具有多个参数的 Laravel 路由功能
- c++ - 如何在 xcode arm64 macOS Big Sur Apple M1 芯片中使用 SFML
- c++ - 在另一个函数中获取文本输入
- reactjs - 如何创建一个通用的全局 Axios 实例,它将使用我的 Redux 存储来获取标头令牌信息?