繁体   English   中英

升级到Rails 5 - Sidekiq Workers发生了死锁

[英]Upgrade to Rails 5 - Deadlock happening for Sidekiq Workers

我将Rails版本从4.2.5.2升级到5.0.0 我目前的Sidekiq版本是4.2.10

我有2个模型参与有很多参与

对于每个Engagement,我有一个并行运行的sidekiq worker的不同实例。 并尝试更新相同的父参与。

participation = @engagement.participation
participation.update_attributes(
        likes_count: engagement_metrics_for_participation.likes,
        comments_count: engagement_metrics_for_participation.comments,
        shares_count: engagement_metrics_for_participation.shares,
        total_engagement: engagement_metrics_for_participation.total_engagement,
        total_impression: engagement_metrics_for_participation.total_impression
      )

现在,工人们正陷入僵局并永远奔跑。 所以我尝试了http://api.rubyonrails.org/classes/ActiveRecord/Locking/Pessimistic.html

并更新了代码

participation = @engagement.participation
participation.with_lock do 
  participation.likes_count = engagement_metrics_for_participation.likes
  participation.comments_count = engagement_metrics_for_participation.comments
  participation.shares_count = engagement_metrics_for_participation.shares
  participation.total_engagement =   engagement_metrics_for_participation.total_engagement
  participation.total_impression = engagement_metrics_for_participation.total_impression
  participation.save
end

但仍面临同样的问题。 我需要你的帮助来解决这个问题。

首先,您应该考虑将rails升级到5.0.2(发布此答案时最新),因为5.0.0无法调用稳定版,并且在发布后很快就会出现很多错误修复。

其次,由于模型代码尚未共享,我只能告诉您模型中存在导致更新失败的内容,可能是某些验证错误,回调错误等。

我可以建议的一种解决方法是,如果你不关心这个特定方法的回调或验证,你可以使用update_columns而不是update_attributes ,这将跳过模型验证并且不会触发任何回调。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM