1

delayed_job gem と関連するコードの変更がなければ、メールはアプリを通じて正しく処理されます。

「ジョブはデータベースからサイレントに削除されます」という見出しの下の宝石の github wiki にある一般的な問題ガイドに従って、次のことを行いました。

/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: "alias@domain.test"
  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

これをさらにトラブルシューティングする方法についてのアイデアはありますか?

4

1 に答える 1

0

これを試してください:

初期化子を作成し、行を追加します

require 'ri_cal'

今、それがどうなるか教えてください。

于 2013-08-07T06:56:43.137 に答える