现在如何执行后台作业?

How to perform a background job now?

我想在后台执行这个

Product.all.map { |product| product.save }

当我保存产品时,将调用回调以在 table 中使用产品成本创建新记录

我为此创建了一个作业,但是如果我执行 perform_now 它不会在后台执行并且 perform_later 会在很久之后执行。

我现在想在后台执行此操作。我不确定我是否也可以在一个线程中执行它。

我正在使用延迟作业,这是作业

class UpdateProductCostsJob < ApplicationJob
  queue_as :default

  def perform
    Product.all.map { |product| product.save }
  end
end

我想在每次保存这个模型时执行

class CostComposition < ApplicationRecord
  before_save :update_product_costs

  private

    def update_product_costs
      UpdateProductCostsJob.perform_now
    end
end

假设您使用的是rails5,您可以创建一个高优先级队列,并在该队列下创建作业。如果只有一个队列,您可以将作业添加到队列中并指定要处理该作业的时间。

UpdateProductCostJob.set(wait_until: Time.now + 5.minutes).perform_later

参考http://edgeguides.rubyonrails.org/active_job_basics.html#enqueue-the-job