【问题标题】:Get current environment name获取当前环境名称
【发布时间】:2016-05-02 20:17:33
【问题描述】:

在 Phoenix Framework 中,如何获取当前环境的名称?

我已经尝试使用System.get_env("MIX_ENV") 读取env 变量,但并不总是设置值。

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    将Mix.env/0 放入应用程序配置的另一种方法是使用模块属性。这也适用于生产环境,因为模块属性是在编译时评估。

    defmodule MyModule do
      @env Mix.env()
    
      def env, do: @env
    end
    

    如果您只需要特定位置的环境 - 例如在启动应用程序主管时 - 这往往是更简单的解决方案。

    【讨论】:

    • 在 config 中设置环境是一种更简洁的解决方案,现在在大多数情况下,您也会进行运行时配置。
    • 或者使用类似于if unquote(Mix.env == :dev), do:的宏。
    【解决方案2】:

    Mix.env() 不适用于生产或其他使用编译版本(使用 Exrm / Distillery 构建)或Mix 不可用的环境。


    解决方案是在您的config/config.exs 文件中指定它:

    config :your_app, env: Mix.env()
    

    然后您可以像这样在应用程序中获取环境原子:

    Application.get_env(:your_app, :env)
    #=> :prod
    

    【讨论】:

    • 为了详细说明这一点,Mix 是一个构建工具,而不是应用程序逻辑所依赖的东西,这就是为什么在二进制文件中包含 Mix 没有意义。
    【解决方案3】:

    现在在默认生成的每个环境配置文件(例如prod.exs)中,您会看到在最后一行设置了环境原子:

    config :your_app, :environment, :prod

    然后您可以使用Application.get_env(:your_app, :environment) 获取它。

    您可以在您创建的任何自定义环境配置中执行相同操作。

    【讨论】:

      【解决方案4】:

      你可以使用Mix.env/0:

      iex(1)> Mix.env
      :dev
      

      【讨论】:

      • 这在应用程序代码、运行时、生产中都不起作用。
      • Mix 在已编译的生产应用程序中不可用,因此在该环境中运行的任何代码中的Mix.env 都会导致以下错误:(UndefinedFunctionError) undefined function Mix.env/0 (module Mix is not available) 使用 Sheharyar 的答案是一个更好的主意.
      猜你喜欢
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 2017-04-11
      • 1970-01-01
      • 2014-01-15
      • 2015-09-14
      相关资源
      最近更新 更多