Ликероводочный завод не заменяет переменные среды

В моем зонтичном проекте, использующем винокурню для релизов, у меня есть db приложение config со следующим:

config :main, Main.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "${DB_USERNAME}",
  password: "${DB_PASSWORD}",
  database: "${DB_NAME}",
  hostname: "${DB_HOST}",
  pool_size: 10

Как я поставил REPLACE_OS_VARS=true в моей сборке среда vars читается правильно, настраивает базу данных.

У меня есть аналогичная настройка в электронном письме app который имеет следующий конфиг:

config :email, from_email: "${FROM_EMAIL}"

Затем я ищу доступ к этому изнутри моего email приложение, вот так:

@from_email Application.get_env(:email, :from_email)

Но ценность @from_email является "${FROM_EMAIL}" не переменная среды, которую я установил для FROM_EMAIL,

Я не слишком знаком с тем, как работает спиртзавод, и не уверен, что передача этих переменных окружения подобными способами приводит к тому, что он читается по-разному.

Понимание того, почему это может происходить, будет с благодарностью.


РЕДАКТИРОВАТЬ:

Мы можем передать $FROM_EMAIL переменная окружения, когда компилируется винокурня, но мы хотели бы передать это во время выполнения. Мы можем сделать это в db приложение, но не в email приложение по какой-то причине.

1 ответ

Решение

Код непосредственно внутри определения модуля (т.е. снаружи def) оценивается во время компиляции. Вам нужно будет позвонить Application.get_env во время выполнения, чтобы получить правильное значение:

Добавлять:

def from_email, do: Application.get_env(:email, :from_email)

к модулю, а затем изменить все @from_email в модуле from_email(),

Другие вопросы по тегам