Elixir 获取当前环境名称

Elixir 获取当前环境名称,elixir,phoenix-framework,Elixir,Phoenix Framework,在Phoenix框架中,如何获取当前环境的名称 我已经尝试使用系统读取env变量。获取_env(“MIX_env”),但该值并不总是设置的。您可以使用: Mix.env()不适用于生产环境或其他使用已编译版本(使用Exrm/Distillery构建)的环境,或者当Mix不可用时 解决方案是在config/config.exs文件中指定它: config:your_应用程序,env:Mix.env() 然后,您可以在应用程序中获得环境atom,如下所示: Application.get_env

在Phoenix框架中,如何获取当前环境的名称

我已经尝试使用
系统读取
env
变量。获取_env(“MIX_env”)
,但该值并不总是设置的。

您可以使用:

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


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

config:your_应用程序,env:Mix.env()
然后,您可以在应用程序中获得环境atom,如下所示:

Application.get_env(:您的_应用程序,:env)
#=>:prod

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

config:your_app,:environment,:prod

然后,您可以使用
Application.get_env(:您的应用程序,:environment)
来获取它


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

Mix.env/0
放入应用程序配置的替代方法是使用模块属性。这也适用于生产环境,因为模块属性是在编译时计算的

defmodule MyModule do
  @env Mix.env()

  def env, do: @env
end

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

这在应用程序代码、运行时和生产中都不起作用。
Mix
在编译的生产应用程序中不可用,因此,在该环境中运行的任何代码中,
Mix.env
都会导致以下错误:
(UndefinedFunctionError)undefined function Mix.env/0(模块混合不可用)
最好使用Sheharyar的答案。要详细说明这一点,Mix是一个构建工具,而不是应用程序逻辑所依赖的东西,这就是为什么在二进制文件中包含Mix是没有意义的。在配置中设置环境是一个更干净的解决方案,现在在大多数情况下,您也会选择运行时配置。或者使用类似于
if unquote的宏(Mix.env==:dev),do:
defmodule MyModule do
  @env Mix.env()

  def env, do: @env
end