DEV Community

Cover image for 💧🐘🐋 Instalação das ferramentas de uma pessoa desenvolvedora Elixir
Dev Maiqui 🇧🇷
Dev Maiqui 🇧🇷

Posted on • Edited on

💧🐘🐋 Instalação das ferramentas de uma pessoa desenvolvedora Elixir

Este é um guia de instalação de muitas ferramentas necessárias para você poder desenvolver na Linguagem de Programação Elixir. Para evitar alguns problemas, recomendo fortemente o uso de Linux ou WSL2 para quem tiver Windows 10, que é o meu caso.

Estou usando a distro Ubuntu 20.04 LTS com o WSL2, que até o momento, não tem apresentando problemas para mim. Para este guia, baixei novamente o Linux Ubuntu 20.04 LTS para instalar tudo do zero. Então se você estiver usando outra distribuição e enfrentar problemas, por favor compartilhe conosco sua dúvida ou solução para o problema, assim estaremos ajudando mais devs :)

A Jornada do Autodidata em Inglês

Instalando o Elixir

Primeiramente, vamos pensar agora na instalação do Elixir. Neste guia vamos instalar o Elixir usando o asdf, que é um gerenciador de versões que pode ser usado para várias linguagens de programação como Node.js, Ruby, Python, inclusive o Elixir e o Erlang.

Instalando o asdf

Para instalar o asdf, certifique-se que você tem o git instalado:

$ sudo apt install curl git
Enter fullscreen mode Exit fullscreen mode

Você pode copiar todo o código abaixo de uma vez só e colar ele no seu terminal se você estiver usando o terminal padrão BASH. Caso você alterou para o terminal ZSH, abaixo deixei o código pronto pra colar no terminal também :)

git clone https://github.com/asdf-vm/asdf.git ~/.asdf
cd ~/.asdf
git checkout "$(git describe --abbrev=0 --tags)"

echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bashrc
echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc
source ~/.bashrc
asdf --version
Enter fullscreen mode Exit fullscreen mode

Você pode copiar todo o código abaixo de uma vez só e colar ele no seu terminal se você estiver usando o terminal ZSH.

git clone https://github.com/asdf-vm/asdf.git ~/.asdf
cd ~/.asdf
git checkout "$(git describe --abbrev=0 --tags)"

echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.zshrc
source ~/.zshrc
asdf --version
Enter fullscreen mode Exit fullscreen mode

Instalando Pacotes do Ubuntu

Para o Elixir funcionar, precisamos ter o Erlang também. E para podermos instalar esses dois, precisamos ter instalado na nossa máquina alguns pacotes do Ubuntu.

Atualizando o sistema:
Se você acabou de instalar o Ubuntu, isso vai demorar, então você pode ir pegar um café :)

$ sudo apt update && sudo apt upgrade -y
Enter fullscreen mode Exit fullscreen mode

Instalando os pacotes:
Isso vai demorar muito, mas muito mesmo, bem mais que o comando de atualização do Ubuntu, então você pode ir pegar outro café, ou melhor, uma jarra de café, ou ir fazer outra coisa mesmo e voltar daqui uma hora :)

$ sudo apt-get -y install build-essential autoconf m4 libncurses5-dev libwxgtk3.0-gtk3-dev libwxgtk-webview3.0-gtk3-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev openjdk-11-jdk
Enter fullscreen mode Exit fullscreen mode

Instalando o Elixir com asdf

Começamos adicionando o plugin do Elixir:

$ asdf plugin-add elixir
Enter fullscreen mode Exit fullscreen mode

Agora podemos verificar todas as versões disponíveis do Elixir

$ asdf list-all elixir
...
1.12.0
1.12.0-otp-22
1.12.0-otp-23
1.12.0-otp-24
1.12.0-rc.0
1.12.0-rc.0-otp-21
1.12.0-rc.0-otp-22
1.12.0-rc.0-otp-23
1.12.0-rc.0-otp-24
1.12.0-rc.1
1.12.0-rc.1-otp-22
1.12.0-rc.1-otp-23
1.12.0-rc.1-otp-24
master
master-otp-21
master-otp-22
master-otp-23
master-otp-24
Enter fullscreen mode Exit fullscreen mode

Vamos instalar a mais recente, que no momento é a 1.12.0

$ asdf install elixir 1.12.0-otp-24
Enter fullscreen mode Exit fullscreen mode

Por fim, precisamos informar ao asdf qual versão do Elixir deve ser usada pela máquina:

$ asdf global elixir 1.12.0-otp-24
Enter fullscreen mode Exit fullscreen mode

Podemos verificar a versão do Elixir usando elixir -v
image Na imagem acima, visualizamos que não temos o Erlang ainda.

Instalando o Erlang com asdf

Adicionando o plugin do Erlang:

$ asdf plugin-add erlang
Enter fullscreen mode Exit fullscreen mode

Agora podemos verificar todas as versões disponíveis dele

$ asdf list-all erlang
...
23.3.4.1
24.0-rc1
24.0-rc2
24.0-rc3
24.0
24.0.1
Enter fullscreen mode Exit fullscreen mode

Podemos instalar a mais recente, que no momento é a 24.0.1

$ asdf install erlang 24.0.1
Enter fullscreen mode Exit fullscreen mode

E precisamos informar ao asdf qual versão do Erlang deve ser usada pela máquina:

$ asdf global erlang 24.0.1
Enter fullscreen mode Exit fullscreen mode

Instalando o Phoenix

Comando para instalar o Phoenix:

$ mix archive.install hex phx_new 1.5.9
Enter fullscreen mode Exit fullscreen mode

Instalando o Node.js com asdf

O Phoenix usará webpack para compilar ativos estáticos (JavaScript, CSS, etc), por padrão. O Webpack usa o gerenciador de pacotes node package manager (npm) para instalar suas dependências e o npm requer o Node.js.

Podemos instalar o Node.js também com o asdf.

Adicionando o plugin do Node:

asdf plugin-add nodejs
bash ~/.asdf/plugins/nodejs/bin/import-release-team-keyring
Enter fullscreen mode Exit fullscreen mode

Verificando todas as versões:

$ asdf list-all nodejs
...
16.0.0
16.1.0
16.2.0
Enter fullscreen mode Exit fullscreen mode

Podemos instalar a versão mais recente:

$ asdf install nodejs 16.2.0
Enter fullscreen mode Exit fullscreen mode

Precisamos informar ao asdf qual versão do Node deve ser usada pela máquina:

$ asdf global nodejs 16.2.0
Enter fullscreen mode Exit fullscreen mode

Verificando a versão:

$ node -v
Enter fullscreen mode Exit fullscreen mode

Instalando o PostgreSQL e o pgAdmin com Docker

O PostgreSQL é um servidor de banco de dados relacional. O Phoenix configura os aplicativos para usá-lo por padrão, mas podemos mudar para MySQL ou MSSQL passando a flag --database ao criar um aplicativo.

Se você não entende muito bem sobre o PostgreSQL, recomendo assistir essa série no youtube: aqui você vai aprender a mudar a senha e o usuário do Postgres

Há duas formas de instalar o Postgres, localmente ou via Docker. Eu recomendo fortemente que você assista o vídeo do canal do Gustavo ELX PRO:
Aqui você vai aprender a instalar o Postgres e o pgAdmin com o Docker

Comando para instalar o postgres com docker:

docker run --name postgres -e POSTGRES_PASSWORD=postgres -p 5432:5432 -d postgres 
Enter fullscreen mode Exit fullscreen mode

ou com network:

docker network create --driver bridge postgres-network

docker run --name postgres-docker --network=postgres-network -e "POSTGRES_PASSWORD=postgres" -p 5432:5432 -v $HOME/docker/volumes/postgres:/var/lib/postgresql/data -d postgres

docker run --name docker-pgadmin --network=postgres-network -p 15432:80 -e "PGADMIN_DEFAULT_EMAIL=g.92oliveira@gmail.com" -e "PGADMIN_DEFAULT_PASSWORD=postgres" -d dpage/pgadmin4
Enter fullscreen mode Exit fullscreen mode

O pgAdmin é uma aplicação que nos permite visualizar as tabelas e os dados nelas mais facilmente.

Para instalar o Docker no WSL2, sugiro esse link: Guia rápido do WSL2 + Docker

inotify-tools (para usuários linux)

Tem que ser instalado para o Live Reloading do Phoenix funcionar: acesse esse link para instalar

Verificando se Tudo Está Funcionando

Agora que tudo está instalado, você já pode criar o seu primeiro aplicativo Phoenix e colocá-lo em funcionamento.

Para verificar se tudo está funcionando, vamos executar um comando para criar um aplicativo Phoenix:

$ mix phx.new hello
Enter fullscreen mode Exit fullscreen mode

Alterando configurações do PostgreSQL

O username e o password devem ser iguais ao do PostgreSQL. Se você não alterou o nome do usuário e a senha no momento de instalação do PostgreSQL, você pode deixar o padrão "postgres", caso contrário, você terá que alterar nos dois arquivos abaixo:

# Configurações para o Ambiente de Desenvolvimento
# caminho: config/dev.exs

config :delivery_app, DeliveryApp.Repo,
  username: "postgres",
  password: "postgres",
  database: "delivery_app",
  hostname: "localhost",
  show_sensitive_data_on_connection_error: true,
  pool_size: 10
Enter fullscreen mode Exit fullscreen mode
# Configurações para o Ambiente de Testes
# caminho: config/test.exs

config :delivery_app, DeliveryApp.Repo,
  username: "postgres",
  password: "postgres",
  database: "delivery_app_test#{System.get_env("MIX_TEST_PARTITION")}",
  hostname: "localhost",
  pool: Ecto.Adapters.SQL.Sandbox
Enter fullscreen mode Exit fullscreen mode

Comando para criar o banco de dados:

$ mix ecto.create
Enter fullscreen mode Exit fullscreen mode

Após, você deverá ver algo semelhante:

Compiling 11 files (.ex)
Generated delivery_app app
The database for DeliveryApp.Repo has been created
Enter fullscreen mode Exit fullscreen mode

ATENÇÃO! Se você receber algum erro, certifique-se de que o usuário e a senha do postgres estejam corretas e, de que o banco de dados tenha sido iniciado.

Verificando se o banco foi iniciado (pra quem instalou sem docker)

  • Se você instalou sem usar docker, você pode usar esse comando para verificar se o postgres foi iniciado:
$ sudo service postgresql status
13/main (port 5432): down
Enter fullscreen mode Exit fullscreen mode
  • Caso o retorno tenha sido down inicie o banco de dados com o comando:
$ sudo service postgresql start
* Starting PostgreSQL 13 database server
Enter fullscreen mode Exit fullscreen mode
  • Após o comando start você receberá a mensagem online
$ sudo service postgresql status
13/main (port 5432): online
Enter fullscreen mode Exit fullscreen mode

Verificando se o banco foi iniciado (pra quem instalou com docker)

  • Se você instalou o Postgres com docker, você pode usar esse comando para verificar se o Postgres foi iniciado. No meu caso, está rodando apenas o pgAdmim, que eu já havia iniciado ele antes:
$ docker container ls
CONTAINER ID   IMAGE            COMMAND            CREATED       STATUS        PORTS                            NAMES
44c8e2eb0171   dpage/pgadmin4   "/entrypoint.sh"   5 weeks ago   Up 26 hours   443/tcp, 0.0.0.0:15432->80/tcp   pgadmin-dev
Enter fullscreen mode Exit fullscreen mode
  • Se o Postgres não apareceu, rode o comando:
$ docker container ls -a
61676d09bc02   postgres              "docker-entrypoint.s…"   5 weeks ago   Exited (0) 12 minutes ago                                    postgres-dev
44c8e2eb0171   dpage/pgadmin4        "/entrypoint.sh"         5 weeks ago   Up 26 hours                 443/tcp, 0.0.0.0:15432->80/tcp   pgadmin-dev
Enter fullscreen mode Exit fullscreen mode
  • Pegue o número do postgres, e rode esse comando:
$ docker container start 61676d09bc02
Enter fullscreen mode Exit fullscreen mode
  • Rode novamente o comando abaixo para verificar se o postgres foi iniciado. No meu caso ele aparece com o pgAdmin, que eu já havia iniciado antes do Postgres:
$ docker container ls
CONTAINER ID   IMAGE            COMMAND                  CREATED       STATUS              PORTS
    NAMES
61676d09bc02   postgres         "docker-entrypoint.s…"   5 weeks ago   Up About a minute   0.0.0.0:5432->5432/tcp           postgres-dev
44c8e2eb0171   dpage/pgadmin4   "/entrypoint.sh"         5 weeks ago   Up 26 hours         443/tcp, 0.0.0.0:15432->80/tcp   pgadmin-dev
Enter fullscreen mode Exit fullscreen mode

Rodando o servidor do Phoenix

Para verificar se tudo está funcionando, digite o comando abaixo:

$ mix phx.server
Enter fullscreen mode Exit fullscreen mode

Após, acesse http://localhost:4000/ e você verá algo semelhante:
Alt Text

Extenções para o Visual Studio Code

Um editor de texto bastante usado pelos desenvolvedores Elixir é o Visual Studio Code. Nessa seção, falaremos sobre as extensões que podemos instalar para melhorar a nossa experiência.

ElixirLS

image
A primeira extensão que precisamos instalar é o ElixirLS que fornece:

  • Suporte a linguagem Elixir;
  • Depurador;
  • Autocomplete;
  • Fechamento automático inteligente de blocos de código;
  • Consulta de documentação ao passar o mouse;
  • Formatador de código ao salvar o arquivo;
  • Entre outras coisas...

Elixir Theme

Elixir Theme
É um tema de cores feito especialmente para código elixir. Nele as cores são bem separadas, onde conseguimos bater o olho e achar as coisas mais rapidamente.

Instalando Bibliotecas Externas no Projeto

Durante o desenvolvimento, é muito comum precisarmos utilizar bibliotecas de terceiros. Não vale a pena desenvolver novamente algo que outra pessoa já fez, testou, e dedicou tempo em análise. Por isso, os projetos que desenvolvemos sempre possuem dependências externas, ou seja, bibliotecas desenvolvidas por terceiros que precisam ser referenciadas pelo nosso projeto.

Vamos então falar sobre as dependências que podem ser instaladas em um projeto Elixir. Ao longo do tempo poderei adicionar novas dependências neste artigo. E, quem sabe, se começar a ficar extenso, posso fazer um novo artigo falando somente sobre dependências.

Credo

Credo é uma ferramenta de análise de código estático para a linguagem Elixir com foco no ensino e na consistência do código. É bom para manter a equipe com um padrão de código.

A versão mais recente você pode encontrar aqui: https://hex.pm/packages/credo

  • Adicione :credo como uma dependência ao mix.exs do seu projeto:
 defp deps do
   [
     {:credo, "~> 1.5", only: [:dev, :test], runtime: false}
   ]
 end
Enter fullscreen mode Exit fullscreen mode
  • Execute o comando abaixo para instalar:
$ mix deps.get
Enter fullscreen mode Exit fullscreen mode
  • Execute o comando para gerar o arquivo de configuração .credo.exs. Nele você poderá desabilitar algumas exigências.
$ mix credo gen.config
* creating .credo.exs
Enter fullscreen mode Exit fullscreen mode

Agora podemos instalar uma extensão do vscode para ele sublinhar o código quando tiver alguma inconsistência:
image

Ou, ao invés de instalar a extensão, podemos também simplismente rodar o comando mix credo no terminal para verificar as inconcistências:
image
Nesse caso o Credo está nos informando que os módulos devem ter documentação, mas se decidirmos no momento não fazer documentação, podemos desabilitar essa função no arquivo .credo.exs trocando [] por false:

# .credo.exs

# ANTES
{Credo.Check.Readability.ModuleDoc, []},

# DEPOIS
{Credo.Check.Readability.ModuleDoc, false},
Enter fullscreen mode Exit fullscreen mode

Ou podemos colocar um @moduledoc false informando que não estamos usando documentação no módulo:
image

Argon2

Argon2 é uma biblioteca de segurança que nos ajuda a encriptar senhas. Argon2 tem melhor resistência à quebra de senha do que Bcrypt e Pbkdf2. Sua principal vantagem é que, por ser uma função de difícil memorização, foi projetada para resistir a ataques paralelos que usam GPUs ou outro hardware dedicado.

A versão mais recente você pode encontrar aqui:
https://hex.pm/packages/argon2_elixir

Adicione :argon2_elixir como uma dependência ao mix.exs do seu projeto:

def deps do
  [{:argon2_elixir, "~> 2.0"}]
end
Enter fullscreen mode Exit fullscreen mode

Não esqueça de executar o comando para instalar:

$ mix deps.get
Enter fullscreen mode Exit fullscreen mode

ExCoveralls

ExCoveralls é uma biblioteca Elixir que relata estatísticas de cobertura de teste.

Para instalar visite o link: https://github.com/parroty/excoveralls#mixexs

Nesse link você terá acesso ao código da imagem abaixo, copie e cole no arquivo mix.exs conforme a imagem:

image
image
image

Não esqueça de executar o comando para instalar:

$ mix deps.get
Enter fullscreen mode Exit fullscreen mode

Usando o ExCoveralls

Comando para verificar a cobertura de testes:

$ mix coveralls
Enter fullscreen mode Exit fullscreen mode

ou

$ mix test --cover
Enter fullscreen mode Exit fullscreen mode

Gerando um relatório em html:

$ mix coveralls.html
Enter fullscreen mode Exit fullscreen mode

Esse comando irá gerar uma pasta chamada cover e dentro vamos ter o arquivo excoverals.html
image

Clique com o direito do mouse em cima do arquivo, e copie o caminho do arquivo:
image

Para quem está no Linux, é só colar o caminho no navegador. Para quem está usando Windows com WSL2 terá que informar a pasta de onde está o Linux; se o seu projeto estiver no Linux:
image

No navegador você verá algo semelhante:
image

Arquivo coveralls.json

Podemos criar um arquivo no diretório raiz chamado coveralls.json onde podemos informar qual pasta ou arquivo deverá ser ignorado pelo ExCoveralls; pois existem arquivos que não precisam de testes, que é o caso de alguns arquivos que são por default do Phoenix.

No repositório do ExCoveralls você encontra também o código padrão para o arquivo coveralls.json:
image

O seu arquivo deve ficar semelhante:
image

ExMachina

O ExMachina facilita a criação de dados de teste e associações. Funciona muito bem com Ecto, mas é configurável para trabalhar com qualquer biblioteca de persistência.

Mais informações você encontra na documentação: https://hexdocs.pm/ex_machina/ExMachina.html

Para instalar basta adicionar :ex_machina ao seu arquivo mix.exs:

def deps do
  # Get the latest from hex.pm. Works with Ecto 3.0
  [
    {:ex_machina, "~> 2.7.0"},
  ]
end
Enter fullscreen mode Exit fullscreen mode

A última versão você encontra aqui: https://hex.pm/packages/ex_machina

Não esqueça de executar o comando para instalar:

$ mix deps.get
Enter fullscreen mode Exit fullscreen mode

Se você quer saber como funciona essa lib, você pode acessar um dos meus artigos do projeto Rockelivery onde isso é abordado com detalhes: Projeto Rockelivery: API para Pedidos em um Restaurante com Elixir e Phoenix (Parte 4)

Conclusão

Gostaria de te agradecer pela leitura até aqui e espero ter ajudado de alguma forma. Espero que, aos poucos, possamos ir ajustando as informações nesse artigo, atualizando e acrescentando novas ferramentas. Então, fique de olho nas atualizações. Qualquer dúvida ou sugestão, por favor deixe-me saber, estou sempre no Linkedin :)

Top comments (5)

Collapse
 
eugeniosanches profile image
eugenio-sanches

Parabéns pelo trabalho Maiqui.

Precisei instalar o pacote inotify-tools na minha instalação usando o Debian 11 na hora de subir o phx.server.

Collapse
 
dii_lua profile image
Letícia Silva

Oiie Maiqui, beleza?
Tô vindo aqui dizer que amei o texto, o conteúdo ficou incrível demais ❤️ Inclusive, já compartilhei com o pessoal no meu Twitter, para que mais gente tenha acesso!

Posso te dar uma dica? Eu deixaria o título como "Instalação das ferramentas de uma pessoa desenvolvedora Elixir", para incluir pessoas de todos os gêneros 😄 É algo que sempre tento fazer no meu artigo, para que elas se sintam representadas no texto.

Parabéns!!! Estou esperando pelos próximos 👀 👏 👏

Collapse
 
maiquitome profile image
Dev Maiqui 🇧🇷

Oii Letícia, fico feliz demais que tenha gostado!!! Gostei da dica do título, não tinha parado pra pensar nisso heheh muito obrigado :)

Collapse
 
wlsf profile image
Willian Frantz

Boa Maiqui, parabéns pelo primeiro texto e obrigado por compartilhar sua vivência conosco!

Collapse
 
maiquitome profile image
Dev Maiqui 🇧🇷

Willian que emoção ver seu comentário aqui!!! Acompanho seus artigos também, continue escrevendo... eu que agradeço! Tamo junto :)