gpt4 book ai didi

ruby-on-rails - 延迟发送电子邮件

转载 作者:行者123 更新时间:2023-12-04 23:04:25 28 4
gpt4 key购买 nike

我在 AnswerObserver < ActiveRecord::Observer 中有以下代码在我的 Rails 应用程序中。创建答案后,会向观看问题的用户发送一封电子邮件。

  def after_create(answer)
answer.question.watchers.each do |user|
Notifier.answer_updated(answer, user).deliver
end

通知程序继承自 ActionMailer class Notifier < ActionMailer::Base并且有方法
 def answer_updated(answer, user)
@answer = answer
@user = user
mail(:to => user.email,
:subject => "Your question has been answered")
end

我现在正在尝试使用 SideKiq 将其移动到后台进程。我已经安装并运行了 redis,我成功启动了 sidekiq bundle exec sidekiq .

根据这篇博文 http://blog.remarkablelabs.com/2013/01/using-sidekiq-to-send-emails-asynchronously , SideKiq 内置了对 ActionMailer 的支持
The method that you will likely use the most is .delay. Calling .delay from an Action Mailer will result in the email being added to the DelayedMailer queue for processing.

因此,我在调用操作邮件程序方法 answer_updated 的观察者中将“deliver”方法替换为“delay”,如下所示
  def after_create(answer)
answer.question.watchers.each do |user|
Notifier.answer_updated(answer, user).delay
end

但现在我收到这个错误
undefined method `delay' for #<Mail::Message:0x007fee0c9af1d0>

我没有做任何其他事情来配置 SideKiq。你能解释一下我可能做错了什么吗?

最佳答案

正确的方法是:

Notifier.delay.answer_updated(answer, user)

请参阅文件 Here 中的示例

关于ruby-on-rails - 延迟发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16136462/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com