Использование dotenv в производстве или передача переменных env в js / js.erb?и попытаться с учетными данными - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь передать переменную ENV моего публикуемого ключа полосы в файл stripe.js для Connect.

Dotenv gem:

gem 'dotenv-rails', groups: [:development, :test, :production]

Iдобавил его в мой файл .env для gem dotenv:

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 не достигает производства.

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Я думаю, что вы забыли установить переменную окружения RAILS_MASTER_KEY в своем приложении Heroku, используя подход учетных данных. Из вашей кодовой базы присвойте ей содержимое master.key.

0 голосов
/ 27 марта 2019

Если вы не забыли прекомпилировать свои ресурсы (о которых я часто забываю при работе с heroku), вам нужно явно добавить файл js.erb в список прекомпиляции ( SO post , более подробное сообщение в блоге )

В этом случае вам, в любом случае, не нужно заключать это в переменную. Публикуемый ключ может быть (должен быть) включен для идентификации вашей учетной записи Stripe, и интерполяция в любом случае отправит его в виде простого текста (чего вы обычно хотите избежать, используя переменные ENV), так что вы можете полностью пропустить шаг interp.

Редактировать из комментариев: Вы должны убедиться, что ключ env действительно установлен на Heroku. Есть два способа проверки:

  • войдите в CLI и проверьте
  • проверьте также через настройки на приборной панели ( в этом есть примеры того, как сделать то и другое)

Если вы получаете пустую строку в скомпилированном JS, это, по крайней мере, указывает на то, что ERB обрабатывается, так что ошибка, скорее всего, в том, что в нем нет ничего для интерполяции.

Просто чтобы повторить, нет причин скрывать публикуемый ключ (вот почему он так называется и почему документы передают его в открытом виде). Кроме того, если поместить его в ENV, который вставляется в текст, то все равно ничего не скрывается.

...