这是我第一次异步处理作业(job),我正在应用程序中为后台处理实现Sidekiq.我会将其用于提醒邮箱和应用程序内通知.我很困惑,是应该使用Active Job创建发送邮箱的工作,还是使用Sidekiq Worker发送邮箱.他们似乎做了同样的事情,Rails 4.2 Active Job似乎非常新……它是否取代了Sidekiq工人的需求?

下面是使用活动工单和Sidekiq Worker发送邮件程序代码的相同方法.我正在使用gem来安排日程.

我的邮件.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
end

Using a Sidekiq "Worker"

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

Using an Active Job "Job"

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

Both Examples in my Whenever scheduler

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称之为Job,而Sidekiq称之为Worker.我决定保持术语的不同,以便人们能够区分两者.

你可以用任何一个.请注意,ActiveJob不提供对完整Sidekiq选项集的访问,因此如果您想为您的作业(job)自定义选项,可能需要将其设置为Worker.

Ruby-on-rails相关问答推荐

RubyOnRail在测试环境中启动失败

在URL中将下划线更改为连字符Ruby on Rails

RSpec系统测试无法从工厂访问新创建的记录

使用has_many_through关联创建记录 – Ruby on Rails

Rails 使用多个外键创建/构建

Rails 7 - has_many_attached 在加载新附件时删除旧附件

计算总价(商品数量*商品价格)

为什么 Rails 执行器不能识别内核的改进?

在 Datatable Ajax 调用中通过 Ajax 更新 div

ActiveRecord 包括.指定包含的列

Rails 3 - Select 包含?

如何验证 ActiveRecord 中邮箱字段的格式?

rails active admin 部署:找不到文件'jquery-ui'

如何将 ActionMailer default_url_options 的 :host 动态设置为请求的主机名?

我可以在 twitter-bootstrap popover 数据内容中使用 html 标签吗?

Rails:一次添加多个 flash[:notice] 的简单方法

在任何来源中都找不到 thread_safe-0.3.0

find、where 和 find_by_id 有什么区别?

Ruby 1.9.2 和 Rails 3 无法打开 rails 控制台

我什么时候需要在 Rails 中重新启动服务器?