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
как обычно, но если с другой машины я пытаюсь выполнить команду (не входя физически и не взаимодействуя с терминалом), она завершается с той же ошибкой, что и у вас.
Возможные решения
Есть два возможных решения этой проблемы:
- Установите erlang и elixir, как описано в оригинальной документации.
- Изменить
.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 на вашем сервере, следуя этим инструкциям