gpt4 book ai didi

ruby-on-rails - Rails after_save 和 after_commit 陷阱

转载 作者:行者123 更新时间:2023-12-04 05:36:07 25 4
gpt4 key购买 nike

after_save在保存记录时调用(但在提交之前)。同时 after_create在提交数据库事务之后调用。

除了这篇文章http://www.justinweiss.com/articles/a-couple-callback-gotchas-and-a-rails-5-fix/这解释了 Sidekiq 作业找不到对象,因为代码在对象提交之前运行,我需要知道哪些其他陷阱才能决定是否 after_createafter_commit哪个更适合使用?

最佳答案

如果您想避免 Sidekiq 像您描述的那样“太快”,我最常看到的解决方案是使用 after_commit

这有一个很大的缺点 - 如果您正在更新模型中的某些内容,after_commit Hook 将再次运行。确保这永远不会发生。

看例子:
您正在创建一个 TextMessage 并使用 status='unsent' 将其保存到数据库中,并在 after_commit Hook 中添加一个 SidekiqJob,用于通过 API 将其发送到您的 SMS 网关。
此 API 返回一个 ID,用于远程跟踪它,然后您将其更新为之前的 TextMessage。这将触发重新发送 TextMessage。

当然,after_commit也会响应on: :updateon: create,比如before_save

在这里,您可以在作业中确保作业之前未发送,但这仍然可能触发重新发送,即使您已经确保了这一点。

这里面很容易死循环,一不小心可能会损失不少。

关于ruby-on-rails - Rails after_save 和 after_commit 陷阱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43469086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com