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 :)
- Instalando o Elixir
- Instalando o Phoenix
- Verificando se Tudo Está Funcionando
- Extenções para o Visual Studio Code
- Instalando Bibliotecas Externas no Projeto
- Conclusão
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
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
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
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
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
Instalando o Elixir com asdf
Começamos adicionando o plugin do Elixir:
$ asdf plugin-add elixir
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
Vamos instalar a mais recente, que no momento é a 1.12.0
$ asdf install elixir 1.12.0-otp-24
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
Podemos verificar a versão do Elixir usando elixir -v
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
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
Podemos instalar a mais recente, que no momento é a 24.0.1
$ asdf install erlang 24.0.1
E precisamos informar ao asdf qual versão do Erlang deve ser usada pela máquina:
$ asdf global erlang 24.0.1
Instalando o Phoenix
Comando para instalar o Phoenix:
$ mix archive.install hex phx_new 1.5.9
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
Verificando todas as versões:
$ asdf list-all nodejs
...
16.0.0
16.1.0
16.2.0
Podemos instalar a versão mais recente:
$ asdf install nodejs 16.2.0
Precisamos informar ao asdf qual versão do Node deve ser usada pela máquina:
$ asdf global nodejs 16.2.0
Verificando a versão:
$ node -v
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
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
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
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
# 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
Comando para criar o banco de dados:
$ mix ecto.create
Após, você deverá ver algo semelhante:
Compiling 11 files (.ex)
Generated delivery_app app
The database for DeliveryApp.Repo has been created
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
- Caso o retorno tenha sido
down
inicie o banco de dados com o comando:
$ sudo service postgresql start
* Starting PostgreSQL 13 database server
- Após o comando
start
você receberá a mensagemonline
$ sudo service postgresql status
13/main (port 5432): online
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
- 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
- Pegue o número do postgres, e rode esse comando:
$ docker container start 61676d09bc02
- 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
Rodando o servidor do Phoenix
Para verificar se tudo está funcionando, digite o comando abaixo:
$ mix phx.server
Após, acesse http://localhost:4000/
e você verá algo semelhante:
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
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
É 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 aomix.exs
do seu projeto:
defp deps do
[
{:credo, "~> 1.5", only: [:dev, :test], runtime: false}
]
end
- Execute o comando abaixo para instalar:
$ mix deps.get
- 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
Agora podemos instalar uma extensão do vscode para ele sublinhar o código quando tiver alguma inconsistência:
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:
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},
Ou podemos colocar um @moduledoc false
informando que não estamos usando documentação no módulo:
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
Não esqueça de executar o comando para instalar:
$ mix deps.get
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:
Não esqueça de executar o comando para instalar:
$ mix deps.get
Usando o ExCoveralls
Comando para verificar a cobertura de testes:
$ mix coveralls
ou
$ mix test --cover
Gerando um relatório em html:
$ mix coveralls.html
Esse comando irá gerar uma pasta chamada cover
e dentro vamos ter o arquivo excoverals.html
Clique com o direito do mouse em cima do arquivo, e copie o caminho do arquivo:
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:
No navegador você verá algo semelhante:
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
:
O seu arquivo deve ficar semelhante:
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
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
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)
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.
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 👀 👏 👏
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 :)
Boa Maiqui, parabéns pelo primeiro texto e obrigado por compartilhar sua vivência conosco!
Willian que emoção ver seu comentário aqui!!! Acompanho seus artigos também, continue escrevendo... eu que agradeço! Tamo junto :)