最近,我在我的應用程序中發現了很多死鎖錯誤。Mysql2 ::錯誤:嘗試獲取鎖時發現死鎖;嘗試重新啓動事務:INSERT INTO
Mysql2::Error: Deadlock found when trying to get lock; try restarting transaction: INSERT INTO `products`....
的代碼如下:用戶已經創建
後,我將一些產品添加到用戶。我不明白爲什麼會發生僵局。
class User < ActiveRecord::Base
after_create :add_products
has_many :products, :dependent => :destroy
def self.create_user
User.create!(.......)
end
def add_products
Product.add(self, "product_name", 10)
end
.....
end
class Product < ActiveRecord::Base
belongs_to :user
def self.add(user, product_name, amount)
transaction do
product = user.products.find_by_product_name(product_name)
if product
product.increment :amount, amount
product.save!
else
product = self.create! user_id: user.id,
product_name: product_name,
amount: amount
end
end
product
end
end
我沒有找到根本原因,任何人都可以給我一些建議嗎?提前致謝!!!
隨着add方法,你爲什麼要再次使用的自我?改用產品。 – Jyothu 2014-12-02 09:41:32
你說得對,我已經修改過。 – pangpang 2014-12-02 09:54:08
請參考下面的鏈接,這將幫助你 http://stackoverflow.com/questions/2332768/how-to-avoid-mysql-deadlock-found-when-trying-to-get-lock-try-重新啓動-tra – Sush 2014-12-02 10:20:45