2016-03-09 15 views
12

Mix.env/0 hoạt động chính xác trong mix phoenix.server nhưng không thể gọi trong môi trường sản xuất được xây dựng với exrm. Nó có ý nghĩa bởi vì trộn không được bao gồm trong bản phát hành bản phát hành, nhưng có bất kỳ tương đương với Mix.env/0 không?Mix.env/0 tương đương trong env sản xuất?

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

Tôi đang sử dụng Mix.env/0 như thế này trong một số mã:

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

Trả lời

24

Bạn chỉ có thể xác định một giá trị cấu hình cho môi trường:

config/prod.exs

config :my_app, :environment, :prod 

config/dev.exs

config :my_app, :environment, :dev 

Sau đó bạn có thể kiểm tra giá trị sử dụng Application.get_env/3

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

Tuy nhiên, tôi sẽ khuyên bạn nên đưa ra bối cảnh nhiều hơn này. Giả sử bạn muốn áp dụng điều kiện xác thực trong quá trình sản xuất, bạn có thể đặt cấu hình thành:

config :my_app, MyApp.Authentication, 
    active: true 

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

Bằng cách này, các điều kiện của bạn là tính năng dựa trên môi trường. Bạn có thể bật và tắt chúng bất kể môi trường.

+0

Cảm ơn bạn, đó là một ý tưởng tuyệt vời. Tôi sẽ viết lại mã như bạn đã đề xuất! – hykw

+0

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

Các vấn đề liên quan