问题
此前代码放在一个repo下, 代码重用的方式是umbrella. 为了将代码拆分, 让服务间的边界更明显, 我们将elixir project拆分开, 以deps方式重用代码. 遇到了deps编译时默认env为prod问题.
详情
发现部分单元测试失效, 后面定位到, 类似如下的代码, 全部失效.
if Mix.env != :prod do
xxxx
end
解决
参考
https://stackoverflow.com/que...
修改mix.exs, 让构建deps时, 使用当前的Mix.env.
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.exs
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。