Múltiplas versões do Elixir com ASDF
Tags: elixir, erlang, ptbr
Published: 2021-06-10 21:04:02

## ASDF

O gerenciador de versões [ASDF](https://github.com/asdf-vm/asdf) é uma linha de comando open-source disponível no GitHub que permite instalar múltiplas versões de diversas  linguagens na mesma máquina, incluindo `Elixir` e `Erlang`.

---

## Instalando manualment

Primeiro clone o projeto do GitHub com o seguinte comando:

```
git clone https://github.com/asdf-vm/asdf.git ~/.asdf
```

> Se por algum acaso você quiser desinstalar o `asdf` da sua maquina basta deleter a pasta `~/.asdf`.

---

## Instalando via Homebrew (apenas no Mac)

Para instalar utilizando o [Homebrew](https://brew.sh/) basta executar o comando:

```
brew install asdf
```

---

## Configurando a Shell

Agora que você tem a linha de comando instalada na sua maquina você deve configurar a sua `shell`, no caso do `zsh` adicione esse linha no arquivo `~/.zshrc`.

```
. $HOME/.asdf/asdf.sh
```

Se você utilizar [Oh My ZSH](https://ohmyz.sh/), apenas adicione o plugin `asdf` nas configurações de plugin:

```
plugins=(asdf)
```

Se por acaso utilizar alguma outra `shell` pode olhar a [documentação](https://asdf-vm.com/#/core-manage-asdf?id=install) como realizar a configuração.

---

## Instalando os plugins

Agora que temos o `asdf` instalado e configurado na nossa maquina podemos instalar os plugins das linguagens que a gente quer que ele gerencie as versões, no caso deste post o `Elixir` e o `Erlang`.

```
asdf plugin add erlang
asdf plugin add elixir
```

---

## Instalando Erlang/OTP

Para saber as verões disponíveis para instalar execute o comando:

```
asdf list-all erlang

23.3.4.3
24.0-rc1
24.0-rc2
24.0-rc3
24.0
24.0.1
24.0.2
...
```

Quando listar todas as versões disponíveis escolha a que deseja instalar e execute o comando a seguir para instalar:


```
asdf install erlang 23.3.4.3
```

> Perceba que diferente de outros gerenciadores de versão o `asdf` precisa que você seja específico na versão que deseja instalar, ex: `23.3.4.3`


> Para realizar a build do Erlang você vai precisar de algumas dependências instaladas. No Linux execute o comando: ```apt-get -y install build-essential autoconf m4 libncurses5-dev libwxgtk-webview3.0-gtk3-dev libwxgtk3.0-gtk3-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev openjdk-11-jdk```

---

## Instalando Elixir

Depois de instalar a versão do Erlang no passo anterior você pode listar as verões do Elixir disponíveis executando o comando:

```
asdf list-all elixir

1.12.1
1.12.1-otp-22
1.12.1-otp-23
1.12.1-otp-24
master
master-otp-21
master-otp-22
master-otp-23
master-otp-24
...
```

Como você pode perceber o Elixir tem múltiplas versões compiladas para cada `major` release do Erlang/OTP.

Agora você escolher a verão desejada compatível com a versão do Erlang instalada anteriormente e executar o comando para instalar:

```
asdf install elixir 1.12.1-otp-23
```

---

## Selecionando uma verão para usar

Agora que a gente já sabe instalar as diversas verões disponíveis na mesma máquina vamos ver como selecionar a verão desejada. O `asdf` permite a gente fazer isso de duas formas.

#### Em uma pasta específica

Para definir uma versão para uma pasta específica a gente utiliza o comando `local` do `asdf`:

```
asdf local erlang 23.3.4.3
asdf local elixir 1.12.1-otp-23
```

Esse comando local vai criar na pasta que você executou o comando um arquivo `.tool-versions` que é utilizado pela linha de comando para definir a versão das linguagens que vai ser utilizado naquele projeto.


#### De forma global

Para definir uma versão para todos os projetos que não tenham uma versão definida ainda você pode utilizar o comando `global` do `asdf`.

```
asdf global erlang 23.3.4.3
asdf global elixir 1.12.1-otp-23
```

Este comando vai criar no seu diretório *home* o arquivo `.tool-versions` que vai definir as versões das linguagens que tem que ser utilizadas. 

---

Espero que o conteúdo tenha sido útil para vocês.