Instalando Oban
A instação do Oban é bem simples, basta seguir o guia. Primeiro, vamos adicionar a dependência.
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
endmix 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 moreOban 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á
Obtem as configuraçĩoes de config/config.ex
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?