Elixir 获取当前环境名称
在Phoenix框架中,如何获取当前环境的名称 我已经尝试使用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
系统读取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