获取当前环境名称

Get current environment name

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

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

您可以使用 Mix.env/0:

iex(1)> Mix.env
:dev

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


解决方法是在你的config/config.exs文件中指定:

config :your_app, env: Mix.env()

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

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

更新(2022 年 3 月):

最新版本的 Elixir (v1.13.x+) 建议使用 config_env() 而不是 Mix.env(),所以这样做:

config :your_app, env: config_env()

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

config :your_app, :environment, :prod

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

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

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

求值
defmodule MyModule do
  @env Mix.env()

  def env, do: @env
end

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