在凤凰城框架中,我如何获得当前环境的名称?
我已尝试使用env
阅读System.get_env("MIX_ENV")
个变量,但该值并非始终设置。
答案 0 :(得分:45)
Mix.env
在生产或您使用已编译版本(使用Exrm / Distillery构建)或Mix
不可用的其他环境中不起作用。< / p>
解决方案是在config/config.exs
文件中指定它:
config :your_app, env: Mix.env
然后,您可以在应用程序中获取环境原子:
Application.get_env(:your_app, :env)
#=> :prod
答案 1 :(得分:11)
您可以使用Mix.env/0
:
iex(1)> Mix.env
:dev
答案 2 :(得分:3)
将Mix.env/0
放入应用程序配置的另一种方法是使用模块属性。这也可以在生产环境中使用,因为模块属性是在编译时评估 。
defmodule MyModule do
@env Mix.env()
def env, do: @env
end
如果仅在特定位置需要环境(例如,在启动应用程序管理程序时),这通常是更简单的解决方案。
答案 3 :(得分:1)
现在,在默认情况下生成的每个环境配置文件(例如prod.exs
)中,您都会看到在最后一行设置了环境原子:
config :your_app, :environment, :prod
然后您可以使用Application.get_env(:your_app, :environment)
来获取它。
您可以在创建的任何自定义环境配置中执行相同的操作。