[英]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.