Ликероводочный завод не заменяет переменные среды
В моем зонтичном проекте, использующем винокурню для релизов, у меня есть 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()
,