在Heroku中更改环境变量不会';不要在Phoenix应用程序中更改它们

在Heroku中更改环境变量不会';不要在Phoenix应用程序中更改它们,heroku,elixir,phoenix-framework,Heroku,Elixir,Phoenix Framework,我有一个在Heroku上运行的Phoenix 1.2应用程序,带有一个ENV变量,用于设置我希望发送电子邮件的电子邮件地址 当我改变环境变量的值时,它似乎不会改变;只有在我做了一次公关和重新部署之后,新的变化才会显现出来 这使得我似乎需要以某种方式“重新加载”代码或内存。因此,有两个问题: 为什么会发生这种情况 有没有办法解决这个问题 我假设您正在config文件中设置环境值,并使用Application.get_env在应用程序中访问它们 Elixir应用程序是编译的,而不是解释的。当您将应

我有一个在Heroku上运行的Phoenix 1.2应用程序,带有一个ENV变量,用于设置我希望发送电子邮件的电子邮件地址

当我改变环境变量的值时,它似乎不会改变;只有在我做了一次公关和重新部署之后,新的变化才会显现出来

这使得我似乎需要以某种方式“重新加载”代码或内存。因此,有两个问题:

  • 为什么会发生这种情况

  • 有没有办法解决这个问题


  • 我假设您正在
    config
    文件中设置环境值,并使用
    Application.get_env
    在应用程序中访问它们


    Elixir应用程序是编译的,而不是解释的。当您将应用程序部署到heroku时,它会使用可用的环境变量对其进行编译,并将其硬编码到应用程序中。因此,即使重新启动应用程序也无法工作;它需要用新的环境变量重新编译

    以下是一些解决方案:

    • 如果正在使用
      Exrm
      构建发布,则可以使用

    • 改为用于获取环境变量,但除非在更改环境配置后重新启动应用程序,否则这将不起作用

    • 使用允许您通过在
      config.exs
      中指定环境配置(如
      {:system,“MY_VARIABLE”}
      )来使用环境配置的

    • 或者使用现有软件包(如或)来管理您的配置


    您使用的构建包是什么?您的代码是否使用
    系统。get_env/1
    ?我是否也可以在
    IEx.Helpers.控制台内重新编译
    IEx
    并在我更改环境变量后重新编译应用程序?我不相信。因为当你执行一个程序时,它会收到一个shell和env变量的“副本”(至少我是这么理解的)。