【问题标题】:Edeliver/Distillery fails with "bash: line 10: mix: command not found" error?Edeliver/Distillery 因“bash: line 10: mix: command not found”错误而失败?
【发布时间】:2018-02-18 22:26:55
【问题描述】:

我在运行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。

【问题讨论】:

    标签: elixir phoenix-framework edeliver distillery


    【解决方案1】:

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

    【讨论】:

    • 这为我完成了这项工作,并允许在不更改 .bashrc 的情况下继续使用 asdf。
    【解决方案2】:

    也许是 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。

    另一个问题是第二个解决方案相当老套,所以我不确定这是一个好的做法(更不用说潜在的安全隐患)。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2022-12-10
      • 2016-08-14
      • 2015-12-06
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 2017-01-29
      • 2020-09-26
      • 2019-09-12
      相关资源
      最近更新 更多