Bootstrap

Полный пошаговый план: обновление asdf и установка среды Elixir + Phoenix

Полный пошаговый план: обновление 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 ищет версии в следующем порядке:

  1. .tool-versions в текущем каталоге
  2. В родительских каталогах
  3. ~/.tool-versions (global)
  4. Если нигде нет — выводит ошибку

✅ Завершаем установку

Теперь выполни:

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.


Копирование материалов разрешается только с указанием автора Roman Sakhno и индексируемой прямой ссылкой на сайт (http://itdid.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/sahroman.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/sahroman.

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как настроить свой компьютер

  2. Текстовая ссылка:

    Она выглядит вот так: Как настроить свой компьютер

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

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

крипто-донат, на развитие сайта itdid.ru:

В новом окне с терминалом itdid.ru, введите любую сумму: