簡體   English   中英

Elixir-在Mac上設置MIX_ENV會產生FunctionClauseError

[英]Elixir - setting MIX_ENV on a Mac yields FunctionClauseError

我無法讓Elixir應用程序從Mac上的本地環境讀取MIX_ENV變量。 例如,運行命令

$ MIX_ENV=prod iex -S mix

引發以下錯誤:

** (FunctionClauseError) no function clause matching in String.split/3    

    The following arguments were given to String.split/3:

        # 1
        nil

        # 2
        " "

        # 3
        []

    Attempted function clauses (showing 4 out of 4):

        def split(string, %Regex{} = pattern, options) when is_binary(string)
        def split(string, "", options) when is_binary(string)
        def split(string, pattern, []) when is_tuple(pattern) or is_binary(string)
        def split(string, pattern, options) when is_binary(string)

    (elixir) lib/string.ex:407: String.split/3
    (stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
    (stdlib) erl_eval.erl:888: :erl_eval.expr_list/6
    (stdlib) erl_eval.erl:240: :erl_eval.expr/5
    (stdlib) erl_eval.erl:232: :erl_eval.expr/5
    (stdlib) erl_eval.erl:888: :erl_eval.expr_list/6
    (stdlib) erl_eval.erl:411: :erl_eval.expr/5
    (stdlib) erl_eval.erl:126: :erl_eval.exprs/5

如果我在單獨的步驟中設置MIX_ENV ,也會發生這種情況。

根據https://elixir-lang.org/getting-started/mix-otp/introduction-to-mix.html上的文檔,在我看來我做得正確,但似乎我在不。 我需要設置其他方式嗎?

如前所述,我正在Mac上運行Mojave 10.14.6,而我的Elixir版本是1.8.1。

我會檢查您的配置。 對我而言,很多時候這是由於期望設置環境變量而產生的。

我的猜測是您有一些看起來像這樣的代碼:

:my_app
|> Application.get_env(:some_config)
|> String.split(" ")
|> do_something_else()

然后,在您的config/config.exsconfig/dev.exs您可能會有類似以下內容:

config :my_app, :some_config, "some value"

然后,您的config/prod.exs可能具有以下內容:

config :my_app, :some_config, System.get_env("MY_ENV_VAR")

如果未設置MY_ENV_VAR ,但是您在產品中運行您的應用程序(例如,執行MIX_ENV=prod iex -S mix ),則Application.get_env(:my_app, :some_config)將返回nil ,然后您將嘗試像這樣拆分一個字符串。

這只是基於我的經驗的猜測,但是您的堆棧跟蹤會使我相信我錯了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM