Полный пошаговый план: обновление asdf и установка среды Elixir + Phoenix
? Полный пошаговый план: обновление asdf и установка среды Elixir + Phoenix
1⃣ Полное удаление старого `asdf`
☯
Terminal:
⌕
≡
✕
rm -rf ~/.asdf
* Удаляем старую версию, чтобы не было конфликтов.
* Старые shims и плагины будут потеряны.
2⃣ Установка `asdf` версии на Go (v0.16+)
Свежую версию качаем отсюда, https://github.com/asdf-vm/asdf/releases
☯
Terminal:
⌕
≡
✕
wget https://github.com/asdf-vm/asdf/releases/download/v0.18.0/asdf-v0.18.0-linux-amd64.tar.gz
sudo tar -xvf asdf-v0.18.0-linux-amd64.tar.gz -С /usr/bin/
☯
Terminal:
⌕
≡
✕
asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git
asdf plugin add elixir https://github.com/asdf-vm/asdf-elixir.git
4⃣ Устанавливаем Erlang и Elixir
☯
Terminal:
⌕
≡
✕
asdf install erlang 28.1
asdf set erlang 28.1
# затем переустановим Elixir под эту версию OTP
asdf uninstall elixir 1.19.2-otp-28
asdf install elixir 1.19.2-otp-28
asdf set erlang 28.1
asdf set elixir 1.19.2-otp-28
asdf reshim
exec $SHELL -l
Ты установил Go-версию asdf, теперь перейдём к самой важной части — к инициализации окружения.
Из-за этого mix, elixir, iex и т.п. будут видны в PATH.
? Почему так
Go-версия asdf — это только бинарь, без автоконфигурации оболочки.
Она не добавляет в PATH директории:
☯
Terminal:
⌕
≡
✕
$HOME/.asdf/shims
$HOME/.asdf/bin
А именно там лежат ссылки (shims) на все установленные через asdf бинарники, включая Elixir и Mix.
✅ (1 раз и навсегда)
Создай или отредактируй ~/.bashrc и добавь в конец:
☯
Terminal:
⌕
≡
✕
# >>> asdf environment >>>
export PATH="$HOME/.asdf/bin:$HOME/.asdf/shims:$PATH"
# <<< asdf environment <<<
Затем перезагрузи окружение:
☯
Terminal:
⌕
≡
✕
source ~/.bashrc
Проверь:
☯
Terminal:
⌕
≡
✕
which mix
which elixir
which iex
Они должны указывать на:
☯
Terminal:
⌕
≡
✕
/home/ramanzes/.asdf/shims/mix
/home/ramanzes/.asdf/shims/elixir
/home/ramanzes/.asdf/shims/iex
Если всё так — теперь mix local.hex заработает.
так работает asdf по умолчанию — он ищет .tool-versions в текущем каталоге, затем поднимается вверх по директориям, пока не найдёт файл, и если не найдёт — использует глобальные версии.
Когда не заданы глобальные версии, asdf ругается.
✅ Как сделать версии общими на всю систему
Очень просто — нужно установить global-версию для Erlang и Elixir:
☯
Terminal:
⌕
≡
✕
#Обязательно!!! переходим на верхний уровень, в корень домашнего каталога пользователя cd ~ asdf set erlang 28.1 asdf set elixir 1.19.2-otp-28 asdf reshim
Теперь asdf создаст файл:
☯
Terminal:
⌕
≡
✕
~/.tool-versions
И туда положит:
☯
Terminal:
⌕
≡
✕
erlang 28.1 elixir 1.19.2-otp-28
После этого в любом каталоге, даже в ~/Downloads:
☯
Terminal:
⌕
≡
✕
iex # будет работать elixir -v erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().' -noshell mix
? Итого
? asdf ищет версии в следующем порядке:
.tool-versionsв текущем каталоге- В родительских каталогах
~/.tool-versions(global)- Если нигде нет — выводит ошибку
✅ Завершаем установку
Теперь выполни:
☯
Terminal:
⌕
≡
✕
mix local.hex --force
mix archive.install hex phx_new --force
и убедись, что Phoenix работает:
☯
Terminal:
⌕
≡
✕
mix phx.new --version
? Дополнительно (для удобства)
? Ниже — полностью автономный bash-скрипт, который:
✅ удаляет старый asdf (если есть, и он < v0.18.0),
✅ скачивает и устанавливает Go-версию asdf в /usr/bin,
✅ добавляет правильные пути в ~/.bashrc,
✅ инициализирует плагины и ставит Erlang + Elixir.
? **install_elixir_env.sh**
☯
Terminal:
⌕
≡
✕
#!/usr/bin/env bash
set -e
ASDF_VERSION="v0.18.0"
ASDF_BIN="/usr/bin/asdf"
ASDF_DIR="$HOME/.asdf"
BASHRC="$HOME/.bashrc"
echo "? Установка среды Elixir + asdf ($ASDF_VERSION)"
echo "---------------------------------------------"
# 1⃣ Проверяем текущую версию asdf
if command -v asdf &>/dev/null; then
CURRENT_VERSION=$(asdf version 2>/dev/null | grep -oE 'v[0-9]+\.[0-9]+(\.[0-9]+)?' || echo "v0.0.0")
echo "✅ Найден asdf $CURRENT_VERSION"
if [ "$CURRENT_VERSION" != "$ASDF_VERSION" ]; then
echo "⚠ Удаляем старую версию asdf..."
rm -rf "$ASDF_DIR"
sudo rm -f "$ASDF_BIN"
fi
else
echo "ℹ asdf не найден — устанавливаем свежую версию"
fi
# 2⃣ Скачиваем и распаковываем бинарник asdf v0.18.0
if [ ! -f "$ASDF_BIN" ]; then
echo "⬇ Скачиваем asdf $ASDF_VERSION..."
wget -q "https://github.com/asdf-vm/asdf/releases/download/${ASDF_VERSION}/asdf-${ASDF_VERSION}-linux-amd64.tar.gz" -O /tmp/asdf.tar.gz
echo "? Распаковываем бинарник в /usr/bin/"
sudo tar -xvf /tmp/asdf.tar.gz -C /usr/bin/
sudo chmod +x /usr/bin/asdf
rm -f /tmp/asdf.tar.gz
fi
# 3⃣ Проверяем установку
echo "? Проверка asdf:"
asdf version || { echo "❌ asdf не установлен."; exit 1; }
# 4⃣ Добавляем в PATH (если ещё нет)
if ! grep -q 'asdf/shims' "$BASHRC"; then
echo "? Добавляем окружение в $BASHRC..."
cat <<'EOF' >> "$BASHRC"
# >>> asdf environment >>>
export PATH="$HOME/.asdf/bin:$HOME/.asdf/shims:$PATH"
# <<< asdf environment <<<
EOF
else
echo "✅ PATH уже содержит asdf"
fi
# 5⃣ Перезагружаем PATH
export PATH="$HOME/.asdf/bin:$HOME/.asdf/shims:$PATH"
# 6⃣ Добавляем плагины
echo "? Добавляем плагины Erlang и Elixir..."
asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git 2>/dev/null || true
asdf plugin add elixir https://github.com/asdf-vm/asdf-elixir.git 2>/dev/null || true
# 7⃣ Устанавливаем Erlang и Elixir
ERLANG_VERSION="28.1.1"
ELIXIR_VERSION="1.19.2-otp-28"
echo "? Устанавливаем Erlang $ERLANG_VERSION..."
asdf install erlang $ERLANG_VERSION || true
asdf set erlang $ERLANG_VERSION
echo "? Устанавливаем Elixir $ELIXIR_VERSION..."
asdf install elixir $ELIXIR_VERSION || true
asdf set elixir $ELIXIR_VERSION
# 8⃣ Проверяем окружение
echo "---------------------------------------------"
echo "✅ asdf версия: $(asdf version)"
echo "✅ Erlang: $(erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().' -noshell)"
echo "✅ Elixir: $(elixir -v | head -n1)"
echo "✅ Всё готово ?"
echo "---------------------------------------------"
echo "? Перезапусти терминал или выполни: source ~/.bashrc"
⚙ Как использовать
☯
Terminal:
⌕
≡
✕
chmod +x install_elixir_env.sh
./install_elixir_env.sh
После установки просто выполни:
☯
Terminal:
⌕
≡
✕
source ~/.bashrc
7⃣ Устанавливаем Phoenix installer (обход GitHub недоступности)
☯
Terminal:
⌕
≡
✕
# Скачать Phoenix installer на машине с интернетом, либо через архив Hex
# Так как Git репозиторий phx_new больше не существует, установка идёт через Hex
mix archive.install hex phx_new
> Если сеть недоступна, можно подготовить архив на другой машине с интернетом и скопировать в ~/.mix/archives.
Проверяем:
☯
Terminal:
⌕
≡
✕
mix help phx.new
# Должна показать справку по созданию проекта
8⃣ Создаём новый Phoenix проект
☯
Terminal:
⌕
≡
✕
cd ~/myapp/elixir/phoenix
mix phx.new markdown_converter --no-ecto
cd markdown_converter
mix deps.get
cd assets && npm install && cd ..
mix phx.server
Открываем:
http://localhost:4000 — приветственная страница Phoenix.
-
Создано 08.11.2025 22:38:16
-
Roman Sakhno

Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.