获取当前环境名称

Chr*_*ris 24 elixir phoenix-framework

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

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

She*_*yar 46

Mix.env在生产或其他使用编译版本(使用Exrm/Distillery构建)或Mix刚刚不可用的环境中不起作用.


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

config :your_app, env: Mix.env
Run Code Online (Sandbox Code Playgroud)

然后,您可以在应用程序中获取环境原子,如下所示:

Application.get_env(:your_app, :env)
#=> :prod
Run Code Online (Sandbox Code Playgroud)

  • 要详细说明,Mix是一个构建工具,而不是应用程序逻辑所依赖的东西,这就是为什么将Mix包含在二进制文件中是没有意义的. (2认同)

Chr*_*ris 12

你可以使用Mix.env/0:

iex(1)> Mix.env
:dev
Run Code Online (Sandbox Code Playgroud)

  • 这在应用程序代码,运行时和生产中都不起作用. (9认同)
  • `Mix`在编译的生产应用程序中不可用,因此在该环境中运行的任何代码中的`Mix.env`将导致以下错误:`(UndefinedFunctionError)undefined function Mix.env/0(模块Mix不可用) "使用Sheharyar的答案是一个更好的主意. (9认同)

Sas*_*olf 7

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

defmodule MyModule do
  @env Mix.env()

  def env, do: @env
end
Run Code Online (Sandbox Code Playgroud)

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