Adicionando Ecto ao projeto

Adicionando Ecto ao projeto

Temos a página de configuração nesse link. Mas farei a configuração por aqui também. Primeiro precisamos instalar as dependências

  • ecto_sql -> Wrapper do banco de dados

  • postgrex -> Adaptador do Ecto para Postgress

Adicione a suas dependencias os dois.

mix.exs
defmodule CoffeeShop.MixProject do
  use Mix.Project

  def project do
    [
      app: :coffee_shop,
      version: "0.1.0",
      elixir: "~> 1.15",
      start_permanent: Mix.env() == :prod,
      deps: deps()
    ]
  end

  # Run "mix help compile.app" to learn about applications.
  def application do
    [
      extra_applications: [:logger],
      mod: {CoffeeShop.Application, []}
    ]
  end

  # Run "mix help deps" to learn about dependencies.
  defp deps do
    [
      {:tesla, "~> 1.4"},
      {:bypass, "~> 2.1"},
      {:ecto_sql, "~> 3.0"},
      {:postgrex, ">= 0.0.0"}
    ]
  end
end

Depois basta gerir as dependências

mix deps.get
> mix deps.get
Resolving Hex dependencies...
Resolution completed in 0.125s
New:
  db_connection 2.6.0
  decimal 2.1.1
  ecto 3.11.2
  ecto_sql 3.11.1
  postgrex 0.17.5
Unchanged:
  bypass 2.1.0
  cowboy 2.12.0
  cowboy_telemetry 0.4.0
  cowlib 2.13.0
  mime 2.0.5
  plug 1.15.3
  plug_cowboy 2.7.1
  plug_crypto 2.0.0
  ranch 1.8.0
  telemetry 1.2.1
  tesla 1.8.0
* Getting ecto_sql (Hex package)
* Getting postgrex (Hex package)
* Getting db_connection (Hex package)
* Getting decimal (Hex package)
* Getting ecto (Hex package)

Feito isso, vamos a configuração

Quando instalamos Ecto, ganhamos também alguns geradores que vão nos auxiliar. O comando irá gerar a configuração necessária para nos conectar ao banco de dados.

mix ecto.gen.repo -r CoffeeShop.Repo
> mix ecto.gen.repo -r CoffeeShop.Repo
* creating lib/coffee_shop
* creating lib/coffee_shop/repo.ex
* creating config/config.exs
Don't forget to add your new repo to your supervision tree
(typically in lib/coffee_shop/application.ex):

    def start(_type, _args) do
      children = [
        CoffeeShop.Repo,
      ]

And to add it to the list of Ecto repositories in your
configuration files (so Ecto tasks work as expected):

    config :coffee_shop,
      ecto_repos: [CoffeeShop.Repo]

Ele gerou o arquivo lib/coffee_shop/repo.ex com a configuração para o banco de dados. Também foi adicionadm em config/config.exs a configuração de acesso ao banco. E por fim, nos avisou que precisamos fazer duas coisas:

  1. Adicionar ao supervisor de nossa aplicação o módulo criado CoffeeShop.Repo

  2. Adicionar a configuraçãao emconfig/config.exs

Vamos adicionar o supevisor do Ecto ao supervisor de nossa aplicação. Abra lib/coffee_shop/application.ex que criamos para dar suporte a árvore de supervisor e adicione o módulo Repo a lista children.

lib/coffee_shop/application.ex
defmodule CoffeeShop.Application do
  use Application

  def start(_type, _args) do
    children = [
      CoffeeShop.Repo
    ]

    opts = [strategy: :one_for_one, name: CoffeeShop.Supervisor]

    Supervisor.start_link(children, opts)
  end
end

Com isso temos o Repo como filho de nosso supervisor.

Agora vamos finalizar a configuração, adicionando a configuração de nosso repositório ecto em config/confg.exs

config/config.exs
import Config

config :coffee_shop,
  ecto_repos: [CoffeeShop.Repo]

config :coffee_shop, CoffeeShop.Repo,
  database: "coffee_shop",
  username: "postgres",
  password: "postgres",
  hostname: "localhost"

Adicionado a linha 3, temos tudo configurado.

A configuração da linha 6 vai depender de como você configurou seu banco de dados.

Feito isso, temos o Ecto configurado para nosso banco de dados. Agora vamos criar nosso banco. Tendo a adição do Ecto ao projeto, podemos simplesmente criar nosso banco usando o comando

mix ecto.create
> mix ecto.create                     
Compiling 6 files (.ex)
Generated coffee_shop app
The database for CoffeeShop.Repo has been created

Nossa aplicação tem suporte a banco de dados postgres. Matamos então mais um passo

Vamos lá.

Atualizado