【发布时间】:2016-05-02 20:17:33
【问题描述】:
在 Phoenix Framework 中,如何获取当前环境的名称?
我已经尝试使用System.get_env("MIX_ENV") 读取env 变量,但并不总是设置值。
【问题讨论】:
在 Phoenix Framework 中,如何获取当前环境的名称?
我已经尝试使用System.get_env("MIX_ENV") 读取env 变量,但并不总是设置值。
【问题讨论】:
将Mix.env/0 放入应用程序配置的另一种方法是使用模块属性。这也适用于生产环境,因为模块属性是在编译时评估。
defmodule MyModule do
@env Mix.env()
def env, do: @env
end
如果您只需要特定位置的环境 - 例如在启动应用程序主管时 - 这往往是更简单的解决方案。
【讨论】:
if unquote(Mix.env == :dev), do:的宏。
Mix.env() 不适用于生产或其他使用编译版本(使用 Exrm / Distillery 构建)或Mix 不可用的环境。
解决方案是在您的config/config.exs 文件中指定它:
config :your_app, env: Mix.env()
然后您可以像这样在应用程序中获取环境原子:
Application.get_env(:your_app, :env)
#=> :prod
【讨论】:
现在在默认生成的每个环境配置文件(例如prod.exs)中,您会看到在最后一行设置了环境原子:
config :your_app, :environment, :prod
然后您可以使用Application.get_env(:your_app, :environment) 获取它。
您可以在您创建的任何自定义环境配置中执行相同操作。
【讨论】:
你可以使用Mix.env/0:
iex(1)> Mix.env
:dev
【讨论】:
Mix 在已编译的生产应用程序中不可用,因此在该环境中运行的任何代码中的Mix.env 都会导致以下错误:(UndefinedFunctionError) undefined function Mix.env/0 (module Mix is not available) 使用 Sheharyar 的答案是一个更好的主意.