Distillery 不替换环境变量

Distillery not replacing environment variables

在我使用酿酒厂发布的伞式项目中,我有一个 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,环境变量被正确读取并配置了数据库。

我在电子邮件 app 中有一个类似的设置,它具有以下配置:

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

然后我想从我的 email 应用程序中访问它,如下所示:

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

但是@from_email的值是"${FROM_EMAIL}"不是我为FROM_EMAIL设置的环境变量。

我不太熟悉酿酒厂的工作原理,也不确定以这些相似的方式传递这些环境变量是如何导致它被不同地读取的。

如能深入了解为什么会发生这种情况,我们将不胜感激。


编辑:

我们可以在 distillery 编译时传递 $FROM_EMAIL 环境变量,但我们希望在 运行 时传递它。 我们可以在 db 应用程序中执行此操作,但由于某些原因不能在 email 应用程序中执行此操作。

直接在模块定义内(即 def 外)的代码在编译时进行评估。您需要在运行时调用 Application.get_env 以获得正确的值:

添加:

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

到模块中,然后将模块中的所有@from_email改为from_email()