拆分umbrella project遇到的deps編譯env爲prod問題

問題

此前代碼放在一個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

原理

mix 是一個application

mix shell

~ » which mix                                                                                                                                                                               enjolras@ubuntu
/usr/local/bin/mix
------------------------------------------------------------
~ » cat /usr/local/bin/mix                                                                                                                                                                  enjolras@ubuntu
#!/usr/bin/env elixir
Mix.start
Mix.CLI.main

mix.ex

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

project.ex

相關文章
相關標籤/搜索