Uma classe de job escrita à mão, além da entrega de email
Um job simples, além do deliver_later
"Mailers: templates e async" seguiu o Solid Queue pelo deliver_later, o invólucro do Action Mailer em volta de um job. Este app também tem cinco classes de job próprias em app/jobs/: uma avalia submissões de desafios, três cuidam do trabalho com parceiros (ícones de site, anúncios de certificado, entrega de webhooks) e uma apaga nonces de parceiros vencidos. A mais simples é app/jobs/partners/fetch_site_icon_job.rb, completa:
module Partners
class FetchSiteIconJob < ApplicationJob
queue_as :default
def perform(partner_id)
partner = ::Partners::Partner.find_by(id: partner_id)
::Partners::FetchSiteIconService.call(partner: partner) if partner && !partner.logo.attached?
end
end
end
A classe pai é a base deste app, que completa é class ApplicationJob < ActiveJob::Base; end. Ela não acrescenta lógica compartilhada, então cada job declara o próprio comportamento.
O ponto de chamada, e uma escolha de propósito
app/services/admin/partners/save_partner_service.rb:
::Partners::FetchSiteIconJob.perform_later(partner.id) unless partner.logo.attached?
O job recebe partner.id, um Integer simples, e não o objeto partner que já está carregado na memória. O perform recebe partner_id e busca o registro por conta própria com find_by. É uma convenção do ActiveJob com duas vantagens. Os argumentos são serializados na linha do job, que a aula 2 inspeciona. E um find_by novo na hora da execução lê o parceiro como ele está quando o job roda, e não como estava quando o perform_later foi chamado. Se o parceiro foi apagado nesse meio-tempo, o find_by devolve nil e o job não faz nada.
O que este curso cobre
Sete aulas, cada uma checada contra os jobs, a config e as tabelas do Solid Queue instaladas neste app. Esta aula cobre a classe do job e o ponto de chamada. A aula 2 mostra o que o perform_later grava numa linha de SolidQueue::Job. A aula 3 lista as onze tabelas por onde um job passa. A aula 4 lê o config/queue.yml, com o dispatcher e os três pools de workers. A aula 5 explica por que as tabelas do Solid Queue não aparecem pela conexão padrão deste app em desenvolvimento. A aula 6 trata de retry_on, discard_on e limits_concurrency, e de quais jobs deste app os usam.
Continue com a aula 2
O perform_later cria uma linha de SolidQueue::Job que dá para inspecionar
Mostra as linhas de SolidQueue::Job e ReadyExecution que o perform_later cria quando o adapter :async sai de cena.
Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.