我在Rails 4.1上尝试使用Mailboxer Gem和Sidekiq,我跟着文档和文档中的示例应用程序来设置所有的东西。然后,我将邮件程序配置为在UserMailer中使用initializers/mailboxer.rb
config.notification_mailer = UserMailer
config.message_mailer = UserMailer无论是在网站上还是在发送或回复邮件时,一切都很正常。接下来,我尝试使用从Mailboxer github页面上的一个问题获得的代码使用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发布于 2014-08-06 15:32:19
更新: Rails 4.2及以上版本中的语法发生了变化。有关新语法,请参见 Tomasz的回答如下 .。
我们升级到Rails 4.1.4,我再次尝试了相同的代码,这次成功了。我把
config.custom_deliver_proc = ->(mailer, mailable, recipient) do
mailer.delay.send_email(mailable, recipient)
end在初始化器的末尾,不确定位置是否有差异。
我仍然不太清楚为什么相同的代码现在和以前不起作用,但我的理论是,这是一个Rails 4.1.0问题,是用4.1.4升级解决的。希望这能帮到别人!
发布于 2015-07-27 15:33:36
对我来说不管用。没有用于delay的mailer方法。请看这里:
>> RUBY_VERSION
=> "2.2.0"
>> Rails::VERSION::STRING
=> "4.2.1"
>> mailer.methods.include?(:delay)
=> false
>> mailer.send_email(mailable, recipient).methods.include?(:deliver_later)
=> true因此,如果您使用Rails > 4.2,请使用以下代码:
config.custom_deliver_proc = ->(mailer, mailable, recipient) do
mailer.send_email(mailable, recipient).deliver_later
endhttps://stackoverflow.com/questions/24376040
复制相似问题