2016-03-09 13 views
12

Mix.env/0 działa poprawnie w mix phoenix.server, ale nie wywołuje środowiska produkcyjnego zbudowanego za pomocą exrm. Ma to sens, ponieważ mix nie jest zawarty w wersji release, ale czy istnieje odpowiednik Mix.env/0?Mix.env/0 odpowiednik w środowisku produkcyjnym?

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

Używam Mix.env/0 jak to w niektórych kodu:

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

Odpowiedz

24

można po prostu zdefiniować wartość config dla środowiska:

config/prod.exs

config :my_app, :environment, :prod 

config/dev.exs

config :my_app, :environment, :dev 

Następnie można sprawdzić tę wartość za pomocą Application.get_env/3

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

Jednak Polecam dając tym więcej kontekstu. Powiedzmy, że chcesz warunkowo zastosować wtyczkę uwierzytelniania w produkcji, można ustawić config:

config :my_app, MyApp.Authentication, 
    active: true 

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

ten sposób wasze warunki są cechą oparte zamiast środowisko oparte. Możesz je włączać i wyłączać niezależnie od środowiska.

+0

Dziękuję, to świetny pomysł. Przepisuję kod zgodnie z sugestią! – hykw

+0

'config/config.exs':' config: my_app,: environment, Mix.env() ' – ryanwinchester

Powiązane problemy