Niedawno znalazłem wiele błędów zakleszczeń w mojej aplikacji.Mysql2 :: Błąd: zakleszczenie znalezione podczas próby uzyskania blokady; spróbuj ponownie uruchomić transakcję: INSERT INTO
Mysql2::Error: Deadlock found when trying to get lock; try restarting transaction: INSERT INTO `products`....
kod jak poniżej:
Po użytkownik został utworzony, dodam kilka produktów do użytkownika. Nie rozumiem, dlaczego doszło do impasu.
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
Nie znalazłem przyczyny, czy ktoś może mi doradzić? Z góry dziękuję!!!
zw sposób dodawać, Czemu znowu używając siebie.? Zamiast tego użyj produktu. – Jyothu
Masz rację, już zmodyfikowałem. – pangpang
Patrz poniższy link, to pomoże Ci http://stackoverflow.com/questions/2332768/how-to-avoid-mysql-deadlock-found-when-trying-to-get-lock-try- restarting-trans – Sush