【发布时间】:2016-05-21 10:52:28
【问题描述】:
查看ActiveJob 延迟邮件任务(使用delayed_jobs、delayed_jobs_active_record)我有2个问题:
- ActiveJob 的 ActionMailer 的
deliver_later方法 - 如果一个作业可以有多个执行方法
我有一个Post 模型,如果它被更新和删除,需要向版主发送电子邮件。
# Post Model
class Post < ActiveRecord::Base
# Table name: posts
#
# id :integer
# title :string
# body :text
# created_at :datetime
# updated_at :datetime
before_save :email_mod_post_updated, :email_mod_post_deleted
private
def email_mod_post_updated
ModeratorMailerJob.updated_post_email(self).deliver_later
end
def email_mod_post_deleted
ModeratorMailerJob.deleted_post_email(self).deliver_later
end
end
# ModeratorMailer
class ModeratorMailer < ApplicationMailer
default from: "Mod <mod@domain.com>"
def updated_post_email(post)
@post = post
mail(to: "mod@domain.com", subject: "Post Updated - #{@post.title}")
end
def deleted_post_email(post)
@post = post
mail(to: "mod@domain.com", subject: "Post Deleted - #{@post.title}")
end
end
当前ActiveJob 设置:
# app/jobs/updated_post_email_job.rb
class UpdatedPostEmailJob < ActiveJob::Base
queue_as :default
def perform(post)
ModeratorMailer.updated_post_email(post)
end
end
# app/jobs/deleted_post_email_job.rb
class DeletedPostEmailJob < ActiveJob::Base
queue_as :default
def perform(post)
ModeratorMailer.deleted_post_email(post)
end
end
问题 1:
使用deliver_later 方法,这是否仍然依赖于设置ActiveJob,例如。 app/jobs/updated_post_email_job.rb 或者这不是必需的(我有 delayed_job 在后台运行)?
这和调用ModeratorMailerJob.perform_later(post)一样吗
问题 2: 人们是否在他们的活跃工作中添加了多种执行方法,例如:
class EmailModeratorJob < ActiveJob::Base
queue_as :default
def perform(post)
ModeratorMailer.updated_post(post)
end
def perform(post)
ModeratorMailer.deleted_post(post)
end
end
还是最好为特定任务分配不同的工作?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 delayed-job rails-activejob