首页 > 解决方案 > 在生产中使用 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 文件未达到生产。

标签: javascriptruby-on-railsrubystripe-paymentsconnect

解决方案


我认为您RAILS_MASTER_KEY在使用凭证方法时忘记在 Heroku 应用程序中设置环境变量。从您的代码库中为其分配内容master.key


推荐阅读