Работите се премахват от базата данни, без да бъдат обработени

Без скъпоценния камък delayed_job и свързаните промени в кода, имейлите се обработват правилно чрез моето приложение.

Следвайки ръководството за често срещани проблеми, намерено в wiki на 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 gem вместо delayed_job, който заработи почти веднага след настройката. Не е точно това, което исках, защото предпочитах задачите да се съхраняват в DB вместо redis, но засега ще избера това, което работи. - person bdx; 09.08.2013