生产环境中的Mix.env/0等价物?

hyk*_*ykw 19 elixir phoenix-framework

Mix.env/0正常工作mix phoenix.server,但无法在使用exrm构建的生产环境中调用.这是有意义的,因为mix不包含在发布版本中,但有没有相当于Mix.env/0?

(UndefinedFunctionError) undefined function Mix.env/0 (module Mix is not available)
Run Code Online (Sandbox Code Playgroud)

我在一些代码中使用了这样的Mix.env/0:

if Mix.env == :dev do
  # xxxxxx
else
  # xxxxxx
end
Run Code Online (Sandbox Code Playgroud)

Gaz*_*ler 38

您只需为环境定义配置值:

config/prod.exs

config :my_app, :environment, :prod
Run Code Online (Sandbox Code Playgroud)

config/dev.exs

config :my_app, :environment, :dev
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用Application.get_env/3检查该值

if Application.get_env(:my_app, :environment) == :dev do
Run Code Online (Sandbox Code Playgroud)

但是,我建议给出更多背景信息.假设您想在生产中有条件地应用身份验证插件,您可以将配置设置为:

config :my_app, MyApp.Authentication,
  active: true

if Application.get_env(:my_app, MyApp.Authentication) |> Keyword.get(:active) do
  #add the plug
Run Code Online (Sandbox Code Playgroud)

这样,您的条件是基于特征而不是基于环境.无论环境如何,您都可以打开和关闭它们.

  • `config/config.exs`:`config:my_app,:environment,Mix.env()` (5认同)