Как подключить модуль к контроллеру только в производственной среде?

Как подключить модуль к контроллеру только в производственной среде?

Пример:

plug BasicAuth, realm: "Admin Area", username: "admin", password: "pass"

person leon    schedule 12.01.2016    source источник


Ответы (2)


Вы можете воспользоваться средой Mix. Вы можете выборочно добавить вызов plug только в производственной среде примерно так:

if Mix.env == :prod do
  plug BasicAuth, realm: "Admin Area", username: "admin", password: "pass"
end

Эта строка не будет компилироваться ни во что (nil), если Mix.env не является производственным.

person whatyouhide    schedule 12.01.2016
comment
отличный пример! именно то, что я искал. ваш ответ поднимает отличный вопрос ... откуда вы узнали, что BasicAuth может принимать такие параметры, как realm:, username: и т. д.? в документации его нет! - person Loading...; 04.02.2020

Хотя ответ @whatyouhide правильный, будьте осторожны при использовании Mix.env в своем проекте за пределами задач смешивания. Если вы решите использовать Exrm или relx для создания выпусков OTP, библиотека mix не будет включена, и это приведет к сбою вашего приложения при запуске.

В качестве альтернативы вы можете добавить :env ключ в соответствующий файл конфигурации каждой среды со значением env в нем, а затем использовать его так же, как Mix.env.

person Jason Harrelson    schedule 12.01.2016
comment
Чтобы немного расширить это, вы даже можете использовать ключ, относящийся к функции, а не к среде. Например, наличие ключа :admin_auth со значением true или false. Таким образом, функциональность не привязана к вашей среде, что упрощает включение функции в разработке, чтобы гарантировать ее работу. - person Gazler; 13.01.2016
comment
Предложение @ Gazler отличное. Будучи более откровенным, вы никогда не укусите вас. Однако, если быть менее явным, можно. - person Jason Harrelson; 14.01.2016