在我使用 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
,因此可以正确读取环境变量来配置数据库。
我在电子邮件应用程序
中进行了类似的设置,其配置如下:
config :email, from_email: "${FROM_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()
。
关于environment-variables - Distillery 不替换环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48886137/