微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – Sidekiq Rails 4.2使用活跃的工作或工人?有什么不同

这是我的第一个处理作业异步地在我的应用程序中实现了Sidekiq进行后台处理.我将使用它提醒电子邮件和应用内通知.我很困惑我是否应该使用活动作业创建一个发送电子邮件的工作或者Sidekiq工作人员发送电子邮件.他们似乎做同样的事情,Rails 4.2 Active Job似乎很新,是替代Sidekiq工作者的需要吗?

以下是使用活动作业作业和Sidekiq Worker发送邮件代码的相同方式.我正在使用每当宝石进行调度.

my_mailers.rb

class MyMailers < ActionMailer::Base

def some_mailer(r.user_id)
 @user = User.find(r.user_id)
 mailer_name = "ROUNDUP"
 @email = @user.email
 @subject ="subject text"
 mail(to: @email,subject: @subject,template_path: ‘/notifer_mailers',template_name: 'hourly_roundup.html',)
end

使用Sidekiq“工人”
some_worker.rb

class SomeWorker
include Sidekiq::Worker

 def perform()
   @user = User.all
   @reminders = @user.reminders.select(:user_id).uniq.newmade
   @reminders.each do |r|
    MyMailers.some_mailer(r.user_id).deliver_later
  end
 end

end

使用活动作业“作业”
some_job.rb

class SomeJob < ActiveJob::Base
queue_as :mailer

  def perform()
   @user = User.all
   @reminders = @user.reminders.select(:user_id).uniq.newmade
   @reminders.each do |r|
    MyMailers.some_mailer(r.user_id).deliver_later
  end
 end

end

两个例子在我的每次调度程序
schedule.rb

require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
set :path,Rails.root
set :output,Rails.root.join('log','cron.log')

#using a worker
 every 1.day,:at => '4:30 am' do
   runner SomeWorker.perform_async
 end

#using a job
every 1.day,:at => '4:30 am' do
   runner SomeJob.perform_async
 end

解决方法

简短的回答是他们是一回事. ActiveJob将其称为作业,而Sidekiq将其称为“工人”.我决定保留术语不同,以便人们能区分两者.

你可以使用任何一个.请注意,ActiveJob不提供对完整的Sidekiq选项的访问,因此如果您要自定义您的工作选项,您可能需要使其成为“工人”.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐