现在如何执行后台作业?
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
我想在后台执行这个
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