Edeliver / Distillery失败并出现“bash:line 10:mix:command not found”错误?

时间:2017-09-10 16:17:25

标签: elixir phoenix-framework edeliver distillery

运行mix edeliver build release production --verbose

时出现此错误
A remote command failed on:
  deploy@80.111.111.80

但是当我登录服务器时,Elixir(以及Mix)似乎安装得很好。

ssh deploy@80.111.111.80
deploy@80.111.111.80:~$ mix -v
Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]

Mix 1.5.0

似乎工作正常。什么是Edeliver找到我的Elixir安装有困难?我使用asdf版本管理器来安装Elixir和Erlang。

3 个答案:

答案 0 :(得分:4)

我在. $HOME/.asdf/asdf.sh的底部添加了~/.profile

答案 1 :(得分:3)

也许是asdf?

我已经使用asdf安装了Elixir和Erlang,但遇到了同样的问题。

显然,asdf仅在交互模式下执行,这意味着如果我通过ssh连接到服务器,则可以运行它并照常使用mix,但是如果来自另一个我尝试执行命令的机器(通过不物理登录并与终端进行交互)然后失败,并显示相同的错误。

可能的解决方案

有两个可能的解决方案:

  1. 按照original documentation中的说明,本地安装erlang和elixir。
  2. 更改.bashrc文件

本地安装Erlang和Elixir

第一个由@Gus提出的解决方案在技术上是可行的,但是您将被困在机器中特定的erlang / elixir版本中,版本之间的交换是不可能的,更新和修复程序将不可用尽快

对我来说,拥有多个具有不同版本的Elixir项目的人,此解决方案是“不行”。

更改.bashrc文件

第二种解决方案是手动编辑~/.bashrc文件。默认情况下,除非您以交互方式(手动)登录,否则系统将不会加载mix,用户环境变量和其他内容。要更改此行为,您可以注释以下代码(或将其删除)

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

此解决方案是肮脏的,但是如果您使用它,则可以完全访问所有内容,就像手动访问一样。

问题

这些解决方案的问题在于它们不使用Edeliver,而只是使用Distillery。

另一个问题是,第二个解决方案非常笨拙,因此我不确定这是一个好习惯(更不用说潜在的安全隐患了。)

希望有帮助!

答案 2 :(得分:-1)

these instructions

之后,在您的服务器上重新安装exilir和erlang