【问题标题】:Distillery not replacing environment variables酿酒厂不替换环境变量
【发布时间】:2018-04-02 06:57:43
【问题描述】:

在我使用酒厂发布的伞式项目中,我有一个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 应用程序中执行此操作。

【问题讨论】:

  • 感谢您的快速响应,但为什么会想到呢?我已经仔细检查并设置了FROM_EMAIL var,如果没有将其正确传递给应用程序会是一个问题
  • 不要存储在模块属性中,而是尝试在运行时调用Application.get_env(:email, :from_email)。
  • 这就是答案,谢谢@Dogbert。发表一个答案,我会接受它

标签: environment-variables elixir phoenix-framework distillery


【解决方案1】:

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

添加:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2021-11-25
    • 2014-06-17
    • 2019-09-06
    • 1970-01-01
    相关资源
    最近更新 更多