Задания удаляются из базы данных без обработки

Без драгоценного камня delayed_job и связанных с ним изменений кода электронные письма правильно обрабатываются через мое приложение.

Следуя руководству по общим проблемам, найденному на вики github для драгоценного камня под заголовком ' задания молча удаляются из базы данных», я сделал следующее:

/config/initializers/delayed_job.rb

Delayed::Worker.destroy_failed_jobs = false

После перезапуска рабочих и сервера rails я попытался снова, но я все еще вижу, что строка delayed_job добавляется, когда я устанавливаю электронную почту для обработки, и после этого быстро удаляется.

Электронная почта вызывается из контроллера следующим образом:

PresentationMailer.delay.presentation_invitation(@presentation)

Из консоли rails (ожидаемо, у меня еще ни разу не было успешного запуска):

1.9.3p194 :001 > Delayed::Job.last
  Delayed::Backend::ActiveRecord::Job Load (0.5ms)  SELECT `delayed_jobs`.* FROM `delayed_jobs` ORDER BY `delayed_jobs`.`id` DESC LIMIT 1
 => nil 

Выдержка из /log/delayed_job.log

2013-08-06T16:30:54+1200: [Worker(delayed_job host:192.168.1.251 pid:26688)] Job Class#presentation_invitation (id=9) RUNNING
2013-08-06T16:30:54+1200: [Worker(delayed_job host:192.168.1.251 pid:26688)] Job Class#presentation_invitation (id=9) COMPLETED after 0.0081
2013-08-06T16:30:54+1200: [Worker(delayed_job host:192.168.1.251 pid:26688)] 1 jobs processed at 9.1940 j/s, 0 failed

Что, кажется, предполагает, что ошибок не возникает; но почта не отправляется (подтверждено с помощью wireshark, пакеты не отправляются на мой SMTP-сервер)

/app/mailers/presentation_mailer.rb

class PresentationMailer < ActionMailer::Base
  helper :application
  default from: "[email protected]"
  def presentation_invitation(email)
    return false if email.sent
    contact = nil
    presentation = nil
    if email.emailable.class == PresentationAttendee
      contact = email.emailable.contact
      presentation = email.emailable.presentation
    else
      return false
    end
    ics = RiCal.Event do
      description "Presentation"
      dtstart DateTime.parse(presentation.date_time)
      dtend DateTime.parse((presentation.date_time + 30*60).to_s) # (90 minutes length)
      location presentation.presentation_location.to_s
      add_attendee contact.email_address
      alarm do
        description "Presentation"
      end
    end
    attachments["calendar-reminder.ics"] = {mime_type: "text/calendar", content: ics.export}
    @email = email
    @contact = contact
    @presentation = presentation
    content_type = "multipart/mixed" # Required for background processing of mail to complete with attachment in tact
    mail to: "#{contact.first_name} #{contact.last_name} <#{contact.email_address}>", subject: email.email_content.subject if email.email_content
  end
end

Любые идеи о том, как я могу устранить эту проблему?


person bdx    schedule 06.08.2013    source источник
comment
Разместите файл журнала delayed_job в папке журнала. Проверь это.   -  person Steve Robinson    schedule 06.08.2013
comment
Выдержка из журнала delayed_job опубликована.   -  person bdx    schedule 07.08.2013
comment
Есть ли у вас отложенный инициализатор задания? Если да, то опубликуйте. Это очень странно. Еще одно предложение было бы, если бы вы могли создать работу без почты и посмотреть, работает ли она.   -  person Steve Robinson    schedule 07.08.2013
comment
Не могли бы вы также выложить почтовую программу?   -  person Steve Robinson    schedule 07.08.2013
comment
Существует однострочный инициализатор, как в начале моего поста. Ничего, кроме того, что связано с delayed_job. Мейлер написал.   -  person bdx    schedule 07.08.2013
comment
У меня такая же проблема. Мой метод выполняется в консоли, но когда я сохранил это в фоновом задании, delayed_job просто добавил его и удалил. Не уверен, почему это так.   -  person Ashwin Yaprala    schedule 19.09.2014


Ответы (1)


Попробуйте сделать это:

создайте инициализатор и добавьте строку

require 'ri_cal'

А теперь попробуй и дай мне знать, как дела.

person Steve Robinson    schedule 07.08.2013
comment
У этого все еще была та же проблема. Вместо того, чтобы продолжать идти по этому пути, я выбрал гем sidekiq вместо delayed_job, который работал почти сразу после настройки. Это не совсем то, что я хотел, поскольку я предпочитал хранить задания в БД, а не в Redis, но пока я буду использовать то, что работает. - person bdx; 09.08.2013