2016-03-09 8 views
12

Mix.env/0 funziona correttamente in mix phoenix.server, ma non riesce a chiamare in un ambiente di produzione costruito con exrm. Ha senso perché mix non è incluso nella build di rilascio, ma c'è qualche equivalente di Mix.env/0?Mix.env/0 equivalente in produzione env?

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

sto usando Mix.env/0 come questo in qualche codice:

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

risposta

24

Si può semplicemente definire un valore di configurazione per l'ambiente:

config/prod.exs

config :my_app, :environment, :prod 

config/dev.exs

config :my_app, :environment, :dev 

si può quindi verificare che il valore utilizzando Application.get_env/3

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

Tuttavia, mi sento di raccomandare questo dando più contesto. Diciamo che si desidera applicare condizionale una spina di autenticazione in produzione, è possibile impostare la configurazione per:

config :my_app, MyApp.Authentication, 
    active: true 

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

In questo modo, le vostre condizioni sono caratteristica basata invece di ambiente basato. Puoi accenderli e spegnerli indipendentemente dall'ambiente.

+0

Grazie, è una grande idea. Riscriverò il codice come suggerito! – hykw

+0

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