获取当前环境名称
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
如果您只需要特定位置的环境 - 例如在启动应用程序主管时 - 这往往是更简单的解决方案。
在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
如果您只需要特定位置的环境 - 例如在启动应用程序主管时 - 这往往是更简单的解决方案。