在我使用酒厂进行发布的伞形项目中,我有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
应用中执行此操作。
答案 0 :(得分:2)
直接在模块定义内部的代码(即def
外部)在编译时进行评估。您需要在运行时调用Application.get_env
以获取正确的值:
添加:
def from_email, do: Application.get_env(:email, :from_email)
到模块,然后将模块中的所有@from_email
更改为from_email()
。