在Heroku中更改环境变量不会';不要在Phoenix应用程序中更改它们
我有一个在Heroku上运行的Phoenix 1.2应用程序,带有一个ENV变量,用于设置我希望发送电子邮件的电子邮件地址 当我改变环境变量的值时,它似乎不会改变;只有在我做了一次公关和重新部署之后,新的变化才会显现出来 这使得我似乎需要以某种方式“重新加载”代码或内存。因此,有两个问题:在Heroku中更改环境变量不会';不要在Phoenix应用程序中更改它们,heroku,elixir,phoenix-framework,Heroku,Elixir,Phoenix Framework,我有一个在Heroku上运行的Phoenix 1.2应用程序,带有一个ENV变量,用于设置我希望发送电子邮件的电子邮件地址 当我改变环境变量的值时,它似乎不会改变;只有在我做了一次公关和重新部署之后,新的变化才会显现出来 这使得我似乎需要以某种方式“重新加载”代码或内存。因此,有两个问题: 为什么会发生这种情况 有没有办法解决这个问题 我假设您正在config文件中设置环境值,并使用Application.get_env在应用程序中访问它们 Elixir应用程序是编译的,而不是解释的。当您将应
我假设您正在
config
文件中设置环境值,并使用Application.get_env
在应用程序中访问它们
Elixir应用程序是编译的,而不是解释的。当您将应用程序部署到heroku时,它会使用可用的环境变量对其进行编译,并将其硬编码到应用程序中。因此,即使重新启动应用程序也无法工作;它需要用新的环境变量重新编译 以下是一些解决方案:
- 如果正在使用
构建发布,则可以使用Exrm
- 改为用于获取环境变量,但除非在更改环境配置后重新启动应用程序,否则这将不起作用
- 使用允许您通过在
中指定环境配置(如config.exs
)来使用环境配置的{:system,“MY_VARIABLE”}
- 或者使用现有软件包(如或)来管理您的配置
系统。get_env/1
?我是否也可以在IEx.Helpers.控制台内重新编译IEx
并在我更改环境变量后重新编译应用程序?我不相信。因为当你执行一个程序时,它会收到一个shell和env变量的“副本”(至少我是这么理解的)。