Instalando Oban

A instação do Oban é bem simples, basta seguir o guia. Primeiro, vamos adicionar a dependência.

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

  # ...

  defp deps do
    [
      {:tesla, "~> 1.4"},
      {:bypass, "~> 2.1"},
      {:ecto_sql, "~> 3.0"},
      {:postgrex, ">= 0.0.0"},
      {:oban, "~> 2.17"}
    ]
  end
end
mix deps.get
> mix deps.get                                                                          
Resolving Hex dependencies...
Resolution completed in 0.06s
New:
  jason 1.4.1
  oban 2.17.8
Unchanged:
  bypass 2.1.0
  cowboy 2.12.0
  cowboy_telemetry 0.4.0
  cowlib 2.13.0
  db_connection 2.6.0
  decimal 2.1.1
  ecto 3.11.2
  ecto_sql 3.11.1
  mime 2.0.5
  plug 1.15.3
  plug_cowboy 2.7.1
  plug_crypto 2.0.0
  postgrex 0.17.5
  ranch 1.8.0
  telemetry 1.2.1
  tesla 1.8.0
* Getting oban (Hex package)
* Getting jason (Hex package)
You have added/upgraded packages you could sponsor, run `mix hex.sponsor` to learn more

Oban utiliza a estratégia de migrações utilizando Ecto. Para isso, precisamos criar um nova migração utilizando Ecto.

Ele criará uma nova pasta chamada priv/repo/migrations que será onde nossas migrações irão viver. Também criará o arquivo de nosso migração. Vamos abrir ela. No meu caso é o arquivo priv/repo/migrations/20240415200026_add_oban_jobs_table.exs, mas para você terá um prefixo diferente, dependendo da data de criação.

Primeiro vamos mudar de change/0 para up/0, fazemos isso porque queremos que tenha o up/0 e o down/0. up/0 para rodar a migração e down/0 para fazer o rollback caso necessário. Na função up/0 iremos adicionar a configuração por meio de uma função e no down/0, fazermos o downgrade para a versão 1 zerando as dependência.

Precisamos agora rodar as migrações pendentes usando o comando do Ecto

Com isso criamos todas as tabelas necessárias para rodar o Oban. Agora iremos configurar sua utilização no projeto. Abra o arquivo config/config.exs

Temos algumas configurações básicas da engine. Nela temos a quantidade por fila e o repositório que armazenaremos nossos jobs. Feito isso, pronto para produção, mas não para testes.

Imagine rodar o Oban normalmente e o test ficar preso por horas por causa de um job que tem duração longa. Precisamos criar um tipo de mock para isso. O próprio Oban nos da esse super poder, precisando apenas so configurar ele no ambiente de teste. Para isso, vamos criar um arquivo em config/test.exs

A hierarquia de configurações ficará

  1. Obtem as configuraçĩoes de config/config.ex

  2. Estamos em ambietne de test, pegue as configurações de test e o que tiver de igual o de test mantem, sobrepondo o de config/config.exs.

Finalmente precisamos adicionar o Oban a nossa arvore de supervisão, da mesma forma que adicionamos nosso CoffeeShope.Repo. Vamos em lib/coffee_shop/application.ex e colocar um novo filho a supervisão.

Utilizamos Application.fetch_env!/2 para obter a configuração dos arquivos de configuração.

Pronto. Para conseguir ver se tudo deu certo basta acessar o terminal iterativo e rodar Oban.config:

Ótimo, Oban a postos.

Atualizado

Isto foi útil?