tim*_*one 5 ruby-on-rails sidekiq
我有一个在 after_save 中启动的 Sidekiq 作业,它似乎获取了错误的数据,我很好奇这是否是我应该期待的行为。这项工作的目标基本上是构建对象的缓存版本。
我有一个项目可以将 is_enabled 设置为 true / false。
在 after_save 中,我有:
after_save
ItemWorker.peform_async
end
Run Code Online (Sandbox Code Playgroud)
在我的工人中,我有:
def perform item_id
mi=Item.find(item_id)
Queryable.manage_object mi # <-- will build our cached objects here
end
Run Code Online (Sandbox Code Playgroud)
在我的 after_save 开始时,我的所有更改都应该已经在数据库中并提交了 - Postgres 有什么方法可以在此时锁定该行(我使用的是 Postgres 9.4)?
有没有办法让我检查它是否已保存或者我应该将其移动到 after_commit (或其他地方)?
Sidekiq 很有可能会在新的/更改的数据提交到数据库之前运行工作程序,这意味着工作程序将看到错误的数据。
正如Sidekiq 常见问题解答中所解释的,最佳实践是使用after_commit:
Sidekiq 正在尝试在事务实际提交之前执行您的作业。使用 Rails 的
after_commit :on => :create钩子或将作业创建移到事务块之外。
| 归档时间: |
|
| 查看次数: |
1094 次 |
| 最近记录: |