酿酒厂不替换环境变量

时间:2018-02-20 13:13:19

标签: environment-variables elixir phoenix-framework distillery

在我使用酒厂进行发布的伞形项目中,我有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设置的环境变量。

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

了解为何可能发生这种情况将非常感激。

修改

我们能够在酿酒厂编译时传递$FROM_EMAIL环境变量,但我们希望在运行时传递它。 我们可以在db应用中执行此操作,但出于某种原因不能在email应用中执行此操作。

1 个答案:

答案 0 :(得分:2)

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

添加:

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

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