Pergunta

Meu aplicativo usa o Ideia coletiva forca de trabalho atrasado Para enviar e -mail de forma assíncrona. O problema é que isso funciona bem no ambiente de desenvolvimento, mas não na produção. Os empregos não estão falhando (eu verifiquei o delayed_jobs tabela), eles não estão sendo consumidos. Não há nada de nota no log de produção.

Este é o conteúdo do handler coluna dentro do delayed_jobs tabela:

--- !ruby/struct:Delayed::PerformableMethod \
object: CLASS:FeedbackMailer\
method: :deliver_message\
args: \
- AR:Message:6\

—Eu não vejo nada de errado lá. Este é meu FeedbackMailer classe:

class FeedbackMailer < ActionMailer::Base
  def message(message, sent_at = Time.now)
    subject = 'New Feedback Message'
    subject = "#{subject}: #{message.subject}" if message.subject.present?
    subject    subject
    recipients 'me@example.org'
    from       'feedback@example.org'
    sent_on    sent_at
    body       :message => message
  end
end 

Finalmente, este é o método relevante no meu Message classe:

def send_email
  FeedbackMailer.send_later(:deliver_message, self)
end

Sei que o código do ActionMailer funciona corretamente na produção, porque eu o testei de forma síncrona antes de mudar para um trabalho atrasado. Como eu disse, também o executei até o trabalho com sucesso, usando um trabalho atrasado no desenvolvimento.

Se eu executar o top Comando no servidor, então eu posso ver o processo de retardado Ruby Process ganhando vida a cada cinco segundos. Como posso depurar isso?

Foi útil?

Solução

John,

Enquanto eu também usei o garfo de ideia coletiva, descobri que o script de Tobi também funciona. Eu só preciso de um diretório TMP/PID (que você pode ter) e você obtém o arquivo de log e pode cruzar esse arquivo com o que sua coluna de erro diz em seu atraso :: job. primeiro registro (ou qualquer trabalho que seja, é claro) . Script para correr como daemon da Tobi Fork

Ah, e você reiniciou, se fizesse mudanças, certo? Tive que perguntar.

Outras dicas

Você corre ./script/delayed_job com o -e production Conjunto de bandeira?

Qualquer coisa aparece em log/touched_job.log? Você mencionou o registro de produção, mas o trabalho atrasado tem seu próprio log.

  • Job] adquirindo bloqueio no VisuewImageJob

Você pode tentar fazer uma classe separada em vez de usar o método _later ().

class PreviewImageJob < Struct.new(:item_id)
  def perform
    item = Item.find(item_id)
    item.generate_interior_images!
  end
end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top