Производственная консоль Rails не может получить переменные env в AWS Elastic Beanstalk Amazon Linux 2

Я пытался получить доступ к своей производственной консоли на моем экземпляре ec2 как часть моей среды эластичного бобового стебля. Я могу получить доступ к консоли, но когда я запрашиваю объект, например. Wager.all, это дает мне эту ошибку:

[root @ ip-10-0-1-146 config] # bundle exec rails c -e production Загрузка производственной среды (Rails 5.2.4.2) irb (main): 001: 0 ›Wager.all Traceback (последний вызов последний) : PG :: ConnectionBad (fe_sendauth: пароль не указан)

Вот мой файл database.yml (нужно посмотреть производственную конфигурацию):

default: &default
  adapter: postgresql
  encoding: UTF-8
  host: 'localhost'
  
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 10 } %>

test:
  <<: *default

development:
  <<: *default
  url: <%= ENV['DATABASE_URL'] %>
  database: <%= ENV['RDS_DB_NAME'] %>
  username: <%= ENV['RDS_USERNAME'] %>
  password: <%= ENV['RDS_PASSWORD'] %>
  host: <%= ENV['RDS_HOSTNAME'] %>
  port: <%= ENV['RDS_PORT'] %>

production:
  <<: *default
  url: <%= ENV['DATABASE_URL'] %>
  database: <%= ENV['RDS_DB_NAME'] %>
  username: <%= ENV['RDS_USERNAME'] %>
  password: <%= ENV['RDS_PASSWORD'] %>
  host: database-1.c76xg56p4vkw.us-east-2.rds.amazonaws.com
  port: 5432

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

Несмотря на то, что я установил переменные среды в своей консоли эластичного бобового стебля, похоже, что консоль rails не может их получить. Однако похоже, что приложение обращается к этим переменным во время развертывания, поскольку оно может подключиться к моей базе данных.

Вещи, которые я пробовал:

Запуск 'erb config / database.yml', чтобы проверить, может ли erb распознать значения. Он возвращает пустые значения для всех полей, где у меня что-то указано в ‹% =%›. Таким образом, 'пароль: ‹% = ENV [' RDS_PASSWORD ']'%› будет выводиться как 'пароль:'.

Я сослался на это Документ AWS для настройки моего файла database.yml

Позвонили в службу поддержки клиентов AWS, и мы подтвердили, что экземпляр, похоже, знает о переменных среды. Эта команда '/ opt / elasticbeanstalk / bin / get-config environment' правильно выводит все переменные env. Однако сотрудник службы поддержки мало что знал о рельсах, поэтому не смог мне больше помочь.

ruby 2.5.8p224 (версия 67882 от 31.03.2020) [x86_64-linux]




Ответы (1)


Я тоже некоторое время сталкивался с этой проблемой. Оказывается, в версиях платформы AMI Amazon Linux, предшествующих Amazon Linux 2, переменные среды были переданы в bash пользователей.

Вы можете восстановить этот процесс и позволить себе войти в консоль rails, добавив следующее в файл .ebextensions:

commands:
  setvars:
    command: /opt/elasticbeanstalk/bin/get-config environment | jq -r 'to_entries | .[] | "export \(.key)=\"\(.value)\""' > /etc/profile.d/sh.local
packages:
  yum:
    jq: []

Это загрузит ваши переменные ENV в bash каждого пользователя. Затем вы можете вызвать эти переменные (как и в предыдущих версиях AMI), выполнив команду echo $MY_ENV_VARIABLE

person d-pfeif    schedule 21.12.2020