此前代碼放在一個repo下, 代碼重用的方式是umbrella. 爲了將代碼拆分, 讓服務間的邊界更明顯, 咱們將elixir project拆分開, 以deps方式重用代碼. 遇到了deps編譯時默認env爲prod問題.git
發現部分單元測試失效, 後面定位到, 相似以下的代碼, 所有失效.shell
if Mix.env != :prod do xxxx end
參考
https://stackoverflow.com/que...
修改mix.exs, 讓構建deps時, 使用當前的Mix.env.ubuntu
def project do [ ... deps: deps(Mix.env()), ] end defp deps(env) do [ {:ejoy_amqp, git: "https://xxx.git", env: env}, {:ejoy_utils, git: "https://xxx.git", env: env}, ] end
~ » which mix enjolras@ubuntu /usr/local/bin/mix ------------------------------------------------------------ ~ » cat /usr/local/bin/mix enjolras@ubuntu #!/usr/bin/env elixir Mix.start Mix.CLI.main
use Application @doc false def start do {:ok, _} = Application.ensure_all_started(:mix) :ok end
能夠看到mix是自舉的, mix也有mix.exs file.
elixir_src/lib/mix/mix.exsapp
defmodule Mix.MixProject do use Mix.Project def project do [ app: :mix, build_per_environment: false, version: System.version(), escript: [main_module: Mix.CLI] ] end def application do [ registered: [Mix.State, Mix.TasksServer, Mix.ProjectStack], mod: {Mix, []}, env: [colors: []] ] end end