Ruby on Rails after_create_commit 重複執行

在處理after_create_commit這個callback時,發現會有重複執行的問題,最初觀察到的現象是會執行兩次

經過多次修改嘗試後,確定問題是出在callback內更新,單純在裡面放logger丟訊息並不會重複

google後才發現這問題從Rails 4.0就有了(汗

後續也不斷有issue被提出來,不過都沒有去解決

要重現這個問題很簡單,只要弄一個像這樣的Model,然後對它create就能看到無限迴圈

class Test < ApplicationRecord
  after_create_commit :update_time

  def update_time
    self.update(updated_at: Time.now)
  end
end

目前我的解法是透過after_commit_everywhere這個套件,將程式碼直接掛在當下執行時的transaction上,由於不牽涉到rails本身的transaction運作,所以不會遇到重複的雷

還好最近終於有人去修這個問題了(ae028984),不過因為是剛弄上去的,要包進release可能還要些時間

留言

粗體斜體刪除線連結引用圖片程式碼

注意:您的電子信箱將不會被公開,且網站連結不會被搜尋引擎採計