1

我的目标是向 Elixir/Phoenix 应用程序添加一个新的应用程序环境变量,该应用程序与 distillery 一起发布并与 edeliver 一起部署。

因为我在prod.secret.exs文件中添加了一个新值,所以我希望在nil调用Application.get_env(:my_app, :key)生产主机时不会出现新的环境变量。

相反,我得到nil. 我应用的修复是停止应用程序,删除所有内容并部署全新的版本。我想这不是正确的解决方法。

那么,如何正确添加新的配置变量呢?

到目前为止我所注意到的。我将我需要的配置放入prod.secret.exs文件中,并且在构建过程中蒸馏厂成功使用了它。在生成的版本中,该 sys.config文件包含新的配置变量。但var/sys.config已部署应用程序的文件不包含新配置。如果我手动将新配置放入var/sys.config并重新启动发行版,则会在var/sys.config没有新配置变量的情况下重新生成。

4

1 回答 1

0

混合配置是编译时配置,这意味着如果您在配置中获取环境变量,这将在项目的编译阶段完成。

因此,在您构建项目时,它会查看环境变量并将其硬编码到编译的二进制文件中。在每次运行时,它都会查看之前已经获取的那些值。

Elixir 1.9 引入了发布配置,并且 distillery 支持它,您可以在我的一个答案Config中阅读有关此的更多详细信息。

于 2019-11-25T12:11:20.493 回答