Instalando o Elixir com ASDF

Introdução

Elixir é uma linguagem de programação dinâmica e funcional para construir aplicações de fácil manutenção e escaláveis. Atualmente, é a principal linguagem de programação que eu trabalho.

Sempre que um amigo se interessa por ela e me pergunta por onde começar eu indico alguns recursos como o próprio tutorial do site oficial ou o famoso Elixir School. Mas o maior problema vem quando querem instalar ele no próprio computador de uma forma fácil.

Atualmente, muito dessa fricção se da a instalação do Erlang, plataforma que o Elixir roda, ser um pouco complicada, pois na maioria das vezes é preciso compilá-lo e ativar algumas opções para não perder algum recurso no futuro.

Como eu não gosto de indicar o que eu não uso, resolvi escrever esse artigo para compartilhar a forma que eu instalo e configuro o Elixir no meu computador.

Instalando o ASDF

Eu poderia simplesmente indicar uma versão pré-compilada do Erlang e do Elixir, mas hoje em dia, lidando com diversos projetos, você não vai usar só uma versão desse combo, é preciso pelo menos de um gerenciador de versões, e atualmente, o meu escolhido é o ASDF.

Antes de tudo é preciso ter o Git instalado na sua máquina.

O comando abaixo vai instalar o ASDF na sua pasta home:

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.9.0

Para adicionar ele na inicialização do seu terminal, adicione essas duas linhas no final do seu arquivo ~/.bashrc.

. $HOME/.asdf/asdf.sh
. $HOME/.asdf/completions/asdf.bash

Se você usa ZSH adicione o seguinte no seu ~/.zhsrc.

. $HOME/.asdf/asdf.sh

Reinicie seu terminal e pronto, você já deve conseguir utilizar o comando asdf no seu terminal.

Instalando o Erlang

Para instalar o Erlang, primeiro adicione o plugin do Erlang no ASDF com o comando abaixo:

asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git

O plugin do Erlang para o ASDF vai compilar o código fonte ao invés de instalar algo pré-compilado, então é necessário instalar algumas dependências antes.

Eu utilizo o Manjaro no meu computador pessoal, mas sei que existem muitas distros baseadas no Ubuntu, então vou deixar um snippet para esse tipo de distro também.

Para Manjaro (ou distros baseadas no Arch Linux):

sudo pacman -S --needed base-devel
sudo pacman -S ncurses glu mesa wxgtk2 libpng libssh unixodbc

Para Ubuntu 20.04:

sudo apt-get -y install build-essential autoconf m4 libncurses5-dev libwxgtk3.0-gtk3-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev

Para outras distribuições consulte o ASDF Erlang Github.

Eu ativo algumas opções antes da compilação para ter histórico no IEx, para que as documentações dos módulos do Erlang sejam construídas também e para otimizar um pouco os executáveis.

Essas opções e o comando para instalar o Erlang estão no snippet abaixo, na data atual a melhor versão é a 24.2.

export CFLAGS="-O2 -g -fno-stack-check"
export ERL_AFLAGS="-kernel -shell_history enabled"
export KERL_BUILD_DOCS=yes
export KERL_DOC_TARGETS=chunks

asdf install erlang 24.2

Ative essa versão global com o ASDF:

asdf global erlang 24.2

NOTA: se estiver no MacOS você provavelmente irá precisar da seguinte variável de ambiente antes de iniciar a compilação:

export KERL_CONFIGURE_OPTIONS="--without-javac --with-ssl=$(brew --prefix openssl@1.1)"

Instalando o Elixir

Para instalar o Elixir é bem mais simples, adicione o plugin do Elixir para o ASDF:

asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git

Instale o Elixir, na data atual a melhor versão é a 1.13.1:

asdf install elixir 1.13.1

Ative essa versão global com o ASDF:

asdf global elixir 1.13.1

Pronto, você já deve conseguir utilizar o Elixir no seu terminal, para testar basta rodar:

iex

E provavelmente você verá algo assim na sua tela:

Interactive Elixir (1.13.2) - press Ctrl+C to exit (type h() ENTER for help)
iex>

Bônus

Se você chegou até aqui, já tem o Elixir e o Erlang configurado e pode começar a aprender a linguagem!

Eu trabalho muito com desenvolvimento Web, então é imprescindível ter o principal framework do ecossistema Elixir instalado, o Phoenix Framework. Se esse é o seu caso também, segue abaixo um bônus para ter o Phoenix configurado:

Instalando o Phoenix Framework

Habilite o hex (gerenciador de pacotes para o ecossistema Erlang/Elixir) com o comando abaixo:

mix local.hex

Instale o gerador de projetos do Phoenix:

mix archive.install hex phx_new

Pronto, você já deve conseguir gerar um projeto do Phoenix com o snippet abaixo:

mix phx.new <NOME DO PROJETO>

Instalando o Banco de dados

O que é uma aplicação Web sem um banco de dados? A principal escolha do Phoenix é o Postgres.

Atualmente a forma que eu instalo e configuro o Postgres é utilizando o Docker.

Para instalá-lo no Manjaro:

sudo pacman -S docker

Para iniciar o Docker e habilitar sua inicialização automática junto ao sistema:

sudo systemctl start docker
sudo systemctl enable docker

Para instalá-lo no Ubuntu e derivados, consulte o guia oficial.

Para o Docker não ficar pedindo privilégios de root a cada comando (só funciona quando reiniciar o computador):

sudo usermod -aG docker $USER

Para iniciar o Postgres 12 com Docker:

docker run --rm --name my-postgres \
       -e "POSTGRES_PASSWORD=postgres" \
       -p 5432:5432 \
       -d postgres:12-alpine

Pronto, você já é capaz de fazer suas pesquisas e guardar os dados da sua aplicação Phoenix no Postgres!