【发布时间】:2016-08-11 23:29:05
【问题描述】:
我为同一个实体(用户)有几个 Resque 工作人员。处理成功后应该减少call_left属性。
它与perform_now(因此)完美配合,但与perform_later(并行)产生不可预知的结果。在日志中有相同数量的calls_left 提交。
我尝试使用reload 方法,甚至设置了最高的隔离级别。但是还是有这个问题。
如何解决?
class DataProcessJob < ActiveJob::Base
queue_as :default
def perform(user_id, profile_id)
User.transaction(isolation: :serializable) do
user = User.find(user_id).reload
user.data_process(profile_id)
user.update(calls_left: user.calls_left-1)
end
end
end
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 resque