Mysql2::Erreur: Impasse trouvé lorsque vous essayez d'obtenir le verrou; essayez de redémarrer transaction: INSERT INTO

Récemment, j'ai trouvé beaucoup d'erreurs de blocage dans mon application.

Mysql2::Error: Deadlock found when trying to get lock; try restarting transaction: INSERT INTO `products`....

le code comme ci-dessous:

Après que l'utilisateur a été créé, je vais ajouter quelques produits à l'utilisateur. Je ne comprends pas pourquoi blocage qui s'est passé.

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

Je n'ai pas trouver la cause, quelqu'un peut-il me donner quelques conseils? Merci à l'avance!!!!!

  • Dans la méthode add, Pourquoi êtes-vous à l'aide de l'auto de nouveau.? Utiliser le Produit à la place.
  • Vous avez raison, j'ai déjà modifié.
  • Veuillez consulter le lien suivant, cela vous aidera à stackoverflow.com/questions/2332768/...
  • Donc, mon commentaire a été la réponse..?
  • ne suis pas sûr, pouvez-vous expliquer pourquoi peut conduire à une impasse?
InformationsquelleAutor pangpang | 2014-12-02