1

私は Rails 4.1 でMailboxer Gemと Sidekiq を操作しようとしています。ドキュメントとドキュメントのサンプル アプリに従って、すべてをセットアップしました。次に、次のファイルで UserMailer を使用するようにメーラーを構成しましたinitializers/mailboxer.rb

config.notification_mailer = UserMailer
config.message_mailer = UserMailer

サイトでも、メッセージが送信または返信されたときにメールを受信して​​も、すべてが期待どおりに機能します。次に、 Mailboxer github ページの問題の 1 つから入手したこのコードを使用して、Sidekiq を使用してメール ジョブを非同期で実行しようとしました。これも初期化子にあります。

config.custom_deliver_proc = ->(mailer, mailable, recipient) do
  mailer.delay.send_email(mailable, recipient)
end

ただし、メッセージを送信するとSidekiqにヒットしますが、次のエラーがスローされます:

ArgumentError: undefined class/module Mailboxer::Message

user_mailer.rb の関連コードは次のとおりです。

def send_email(message, receiver)
  if message.conversation.messages.size > 1
    reply_message_email(message,receiver)
  else
    new_message_email(message,receiver)
  end
end

#Sends an email for indicating a new message for the receiver
def new_message_email(message,receiver)
  @message  = message
  @receiver = receiver
  set_subject(message)
  mail :to => receiver.send(Mailboxer.email_method, message),
     :subject => t('mailboxer.message_mailer.subject_new', :subject => @subject),
     :template_name => 'new_message_email'
end

#Sends and email for indicating a reply in an already created conversation
def reply_message_email(message,receiver)
  @message  = message
  @receiver = receiver
  set_subject(message)
  mail :to => receiver.send(Mailboxer.email_method, message),
     :subject => t('mailboxer.message_mailer.subject_reply', :subject => @subject),
     :template_name => 'reply_message_email'
end

私は現在通知を使用していないので、それを含めていません。Mailboxer::Message はどこで呼び出され、どのような引数が期待されますか? これは Rails 4.1 のものですか? 私はまだRuby/Railsにかなり慣れていないので、これが私の側の明らかなエラーである場合は申し訳ありません.

delayまた、UserMailer の個々のメソッドを呼び出してみましたが、同じ結果になりました。

def send_email(message, receiver)
  if message.conversation.messages.size > 1
    UserMailer.delay.reply_message_email(message,receiver)
  else
    UserMailer.delay.new_message_email(message,receiver)
  end
end
4

2 に答える 2