Edeliver/Distillery завершается с ошибкой "bash: line 10: mix: command not found"?

Я получаю эту ошибку при запуске 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.

2 ответа

Я добавил . $HOME/.asdf/asdf.sh в нижней части моего ~/.profile,

Может быть, asdf?

Я установил Elixir и Erlang, используя asdf и у меня была та же проблема, что и у тебя.

По-видимому, asdf выполняется только в интерактивном режиме, что означает, что если я подключусь через ssh на сервер я могу запустить его и использовать mix как обычно, но если с другой машины я пытаюсь выполнить команду (не входя физически и не взаимодействуя с терминалом), она завершается с той же ошибкой, что и у вас.

Возможные решения

Есть два возможных решения этой проблемы:

  1. Установите erlang и elixir, как описано в оригинальной документации.
  2. Изменить .bashrc файл

Инсталл Эрланг и Эликсир изначально

Первое решение, предложенное @Gus, будет работать технически. Однако вы будете зависеть от конкретной версии erlang/elixir на вашем компьютере, переключение между версиями будет невозможным, а обновления, а также исправления не будут доступны так быстро.

Для меня, для кого-то, у кого есть несколько проектов Elixir с различными версиями, это решение - "нет-нет".

Изменить файл.bashrc

Второе решение - вручную отредактировать ~/.bashrc файл. По умолчанию, если вы не войдете в систему (вручную), система не загрузится mix пользовательское окружение и другие вещи. Чтобы изменить это поведение, вы можете прокомментировать следующий код (или удалить его)

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

Это грязное решение, но если вы используете его, вы получите полный доступ ко всему, так же, как если бы вы обращались к нему вручную.

Проблемы

Проблемы с этими решениями заключаются в том, что они не используют Edeliver, они просто используют Distillery.

Другая проблема заключается в том, что второе решение довольно хакерское, поэтому я не уверен, что это хорошая практика (не говоря уже о потенциальных последствиях для безопасности).

Надеюсь, поможет!

Просто переустановите exilir и erlang на вашем сервере, следуя этим инструкциям

Другие вопросы по тегам