Elixir混合自动确认

14
我希望在Travis-CI上运行我的Phoenix应用的测试。
日志摘录:
$ MIX_ENV=test mix do deps.get, compile, test

Could not find hex, which is needed to build dependency :phoenix

Shall I install hex? [Yn] 

在获取和安装依赖项时,它会询问是否要安装hex。我想知道是否可以向mix传递--yes选项,以便它不会询问而只是安装?

2个回答

34

您可以将此命令添加到.travis.yml文件中的before_install部分中:

  • mix local.hex --force

当然,在之前的命令中已经安装了Elixir。我从GitHub上现有的一个Elixir项目中复制了这个.travis.yml文件。

language: erlang
env:
  - ELIXIR="v1.0.0"
otp_release:
  - 17.1
before_install:
  - mkdir -p vendor/elixir
  - wget -q https://github.com/elixir-lang/elixir/releases/download/$ELIXIR/Precompiled.zip && unzip -qq Precompiled.zip -d vendor/elixir
  - export PATH="$PATH:$PWD/vendor/elixir/bin"
  - mix local.hex --force
script: "MIX_ENV=test mix do deps.get, test"

10
我认为这是更好的解决方案,应该被接受为答案! - Patrick Oscity

31

像任何Unix命令一样,您可以将yes管道传输到mix命令中:

yes | MIX_ENV=test mix do deps.get, compile, test

但是评论中有一些对这个解决方案的警告。我建议使用得票最高的解决方案!


11
这简直让我大开眼界。突然间,这个命令的存在意义变得非常明显。 - pfac
在Docker(以及可能的其他情况下)存在一个问题 - Erlang会缓冲任何输入,因此持续不断的“yes”输入可能会导致溢出。请参见此答案:https://dev59.com/oZXfa4cB1Zd3GeqPl-mh 我建议来自Fred the Magic Wonder Dog的答案是更好的答案。 - PJeffes
确实,即使在小型应用程序中,这也会使您的 Beam 进程膨胀到几个 Gigabytes 的 RAM,直到触发 OOM。 - Martijn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接