Переменные среды Heroku не установлены в javascript для приложения React / Rails - PullRequest
0 голосов
/ 22 марта 2020

Я создал Rails-Api с интерфейсом React SPA, следуя этому руководству (очень полезно, рекомендую). У меня проблемы с получением Heroku для установки переменных окружения в файле .env, который React использует для конфигурационных переменных. Значения файла просто устанавливаются буквально как «ENV [...]» вместо оценки и установки значения. Что касается Rails, то параметры Heroku ENV установлены правильно, потому что я вижу их в консоли.

.env file:
REACT_APP_API_KEY=ENV['API_KEY']
REACT_APP_AUTH_DOMAIN=ENV['AUTH_DOMAIN']
App.js (top level Component):
console.log(config,process.env);
// which logs:
{
  NODE_ENV: "production"
  REACT_APP_API_KEY: "ENV['API_KEY']"
  REACT_APP_AUTH_DOMAIN: "ENV['AUTH_DOMAIN']"
  ...
}
Rails Console:
irb(main):001:0> ENV
=> {"LANG"=>"en_US.UTF-8", "NODE_ENV"=>"production",
"API_KEY"=>"<correct-value>", "AUTH_DOMAIN"=>"<correct-value>",......}

Есть ли что-то, что мне нужно сделать, чтобы предупредить Heroku о том, что Варианты ENV также должны быть установлены в файле .env для приложения реакции? В учебном руководстве по развертыванию Heroku используются оба пакета сборки nodejs и ruby (в этом порядке). Приложение создается и затем копируется в каталог «publi c» для Rails для обслуживания:

package.json
{
  //...
  "engines": {
    "node": "12.9.0",
    "yarn": "1.22.4"
  },
  "scripts": {
    "build": "yarn --cwd client install && yarn --cwd client build",
    "deploy": "cp -a client/build/. public/",
    "heroku-postbuild": "yarn build && yarn deploy"
  }
}

Я не знаю достаточно о внутренней работе с Heroku env vars swap. Из того, что я понимаю, с помощью Create React App ... содержимое файла .env установлено во время сборки , поэтому вполне возможно, что js скомпилируется до того, как Heroku сможет ввести env-переменные. Я открыт для предложений о других способах сделать это, если этот метод не выполним. Спасибо!

1 Ответ

1 голос
/ 23 марта 2020

Вы можете расширить переменные окружения в файле .env. Когда приложение React создано, оно имеет доступ к переменным в вашем Heroku dyno, и реагирующие сценарии поддерживают ссылки на них в вашем файле .env. Подробнее см. В документах .

С учетом этого ваш файл .env будет выглядеть следующим образом:

REACT_APP_API_KEY=$API_KEY
REACT_APP_AUTH_DOMAIN=$AUTH_DOMAIN

Предполагается, что API_KEY и AUTH_DOMAIN переменные установить в Heroku.

Если вы вначале назовете эти переменные REACT_APP_API_KEY и REACT_APP_AUTH_DOMAIN в Heroku, то они будут восприняты реагирующими скриптами непосредственно из среды (нет необходимости в .env файл)

ПРИМЕЧАНИЕ: с учетом вышесказанного, похоже, что вы пытаетесь раскрыть секреты в приложении React. Документы Create React App настоятельно рекомендуют НЕ делать этого, потому что:

Переменные среды встроены в сборку, что означает, что любой может просмотреть их, проверив файлы вашего приложения.

...