繁体   English   中英

生产环境中的 Mix.env/0 等效项?

[英]Mix.env/0 equivalent in production env?

Mix.env/0 在mix phoenix.server中正常工作,但在使用 exrm 构建的生产环境中调用失败。 这是有道理的,因为 mix 不包含在发布版本中,但是有没有 Mix.env/0 的等价物?

(UndefinedFunctionError) undefined function Mix.env/0 (module Mix is not available)

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

if Mix.env == :dev do
  # xxxxxx
else
  # xxxxxx
end

您可以简单地为环境定义一个配置值:

config/prod.exs

config :my_app, :environment, :prod

config/dev.exs

config :my_app, :environment, :dev

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

if Application.get_env(:my_app, :environment) == :dev do

但是,我建议提供更多上下文。 假设您想有条件地在生产中应用身份验证插件,您可以将配置设置为:

config :my_app, MyApp.Authentication,
  active: true

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

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

您可以像这样在编译时将 Mix.env/0 作为模块常量唤起:

@env Mix.env
#...
if @env == :dev do
#...

就像发布的魅力一样。

我知道这真的很晚了,但是根据程序是在生产模式还是在开发模式下运行不同的配置文件的一种方法是将其添加到config.exs文件的最后一行:

import_config "#{config_env()}.exs"

这将根据应用程序运行的模式导入特定的配置文件。 您可以在此处了解更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM