Mix.env/0 эквивалент в производстве 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

Ответ 1

Вы можете просто определить значение конфигурации для среды:

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

Таким образом, ваши условия основаны на функциях, а не на среде. Вы можете включать и выключать их независимо от среды.

Ответ 2

Проверьте наличие Mix, а не окружающей среды:

if Mix do
  # xxxxxx
else
  # xxxxxx
end