2017-04-07 6 views
1

레일 버전을 4.2.5.2에서 5.0.0으로 업그레이드했습니다. 나의 현재 Sidekiq 버전은 내가 2 개 모델 참여이 많은 참여의이 4.2.10레일 5로 업그레이드 - 사이드킥 작업자를위한 교착 상태 발생

입니다.

각 참여에 대해 나는 다른 측면의 직원이 병렬로 실행되고 있습니다. 동일한 부모 참여를 업데이트하려고합니다.

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 

하지만 여전히 같은 문제에 직면 업데이트. 이 문제를 해결하려면 귀하의 도움이 필요합니다.

+0

이 교착 상태가 발생하지 않아야합니다. 단일 행 업데이트이고 활성 레코드가 차단을 처리 할 수 ​​있습니다. 교착 상태가 있다고 생각합니까? –

+0

시간 초과 문제가 더 많아서 업데이트 시간 초과가 5 초 이내에 잠금을받지 못했다고 생각합니까? –

+0

몇 가지 수정 사항이 적용된 레일 5.0.2를 사용하고 있는지 확인하십시오. –

답변

0

우선 5.0.0을 안정적으로 호출 할 수 없으므로 5.0.2로 레일을 업그레이드하는 것이 좋습니다 (이 답변을 게시 할 때 최신 버전). 릴리스 이후 곧 많은 버그가 수정되었습니다. 모델 코드가 공유되지 않았기 때문에

둘째, 난 단지 등, 어쩌면 약간의 유효성 검사 오류, 콜백 오류 일 경우, 그 갱신이 실패하는 원인 모델 이잖아에 뭔가가 있다는 것을

해결 방법 난 당신을 말할 수있다 제안 할 수 있습니다.이 특정 메서드에 대한 콜백 또는 유효성 검사에 신경 쓰지 않는다면 update_attributes 대신 update_columns을 사용하면 모델 유효성 검사를 건너 뛰고 모든 콜백을 트리거하지 않을 수 있습니다.