5

运行时出现此错误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。

4

2 回答 2

9

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

于 2018-12-16T05:18:44.450 回答
6

也许是asdf?

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

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

可能的解决方案

这个问题有两种可能的解决方案:

  1. 如原始文档中所述,在本机安装 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。

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

希望能帮助到你!

于 2018-11-27T08:40:14.970 回答