【发布时间】:2017-02-22 22:46:47
【问题描述】:
我有一个我认为可以通过Delayed_Job 发送电子邮件的工作设置。但是,我还没有收到我的测试电子邮件,并且延迟几天等待更多的事情发生是不切实际的。我需要弄清楚:
- 是什么问题导致电子邮件无法发送。
- 如何在不等待几天的情况下进行测试。
我是Delayed_Job的新手,请原谅新手的错误。
这是包含send_reminder_emails 方法的模型。没有.delay(run_at: self.mail_date) 位,它们功能齐全,所以至少我知道很多工作:
class Reminder < ActiveRecord::Base
belongs_to :user
before_save :create_mail_date
after_save :send_reminder_emails
extend FriendlyId
friendly_id :name, use: [:slugged, :finders]
def create_mail_date
@schedule = IceCube::Schedule.new(self.date)
case self.repeating
when "Weekly"
@schedule.add_recurrence_rule(
IceCube::Rule.weekly
)
when "Monthly"
@schedule.add_recurrence_rule(
IceCube::Rule.monthly.day_of_month(self.date.mon)
)
when "Yearly"
@schedule.add_recurrence_rule(
IceCube::Rule.yearly.day_of_year(self.date.yday)
)
end
if self.repeating
self.date = @schedule.next_occurrence(Time.now)
end
self.mail_date = self.date - 7.days
end
private
def send_reminder_emails
if self.reminder
ReminderMailer.delay(run_at: self.mail_date).reminder_send(self.user, self).deliver_now
self.create_mail_date
end
end
handle_asynchronously :send_reminder_emails
end
对schedule 的引用是通过Ice_Cube gem 引用的,并且所有日期内容都已通过我的控制台进行了测试并且正在运行。这是我的reminder_mailer.rb:
class ReminderMailer < ApplicationMailer
default from: "man@manlyartofbbq.com"
def reminder_send(user, reminder)
@user = user
@reminder = reminder
mail(to: user.email, subject: "Reminder! #{reminder.name} is fast approaching!")
end
end
我从他们的 Rails 4 自述文件中逐步安装了Delayed_Job。感谢任何帮助解决此邮件的延迟部分!
【问题讨论】:
-
在 Rails 控制台中运行
Delayed::Job.all会得到什么。 -
@Dinesh,我收到了
NameError: uninitialized constant Delayed from (pry):12:in__pry__'` 我觉得这是一个不好的信号。 -
这个有 git repo 吗?
-
一种可能性:上次我查看 DelayedJob 时,它旨在检测邮件程序参数何时是 ActiveRecord 实例,在这种情况下,保存在作业队列中的不是对象而是对象的 id 字段.当作业准备好运行时,它使用 id 进行查找。我想这是一个优化。但是,如果您使用未保存的 ActiveRecord 作为参数,则查找失败,任务发出日志记录并终止。在这里,例如如果
IceCube::Schedule是 ActiveRecord 的子类,那很可能就是正在发生的事情。 -
嗨。您能否从“ ReminderMailer.delay(run_at: self.mail_date).reminder_send(self.user, self).deliver_now”中删除“deliver_now”并检查
标签: ruby-on-rails actionmailer delayed-job