2016-06-13 9 views
-1

Ich bekomme diesen Fehler "Allgemeiner Fehler: 2006 MySQL-Server ist verschwunden" beim Speichern eines Objekts.2006 MySQL-Server ist beim Speichern des Objekts weggegangen

Im nicht, da es geht um den Code einzufügen viel zu kompliziert, und ich kann mit diesem Beispiel erklären, aber zuerst ein wenig Kontext:

Im eine Funktion über die Kommandozeile mit Phalcon Aufgaben ausführen, schafft diese Aufgabe eines Objekt aus einer Model-Klasse und dieses Objekt ruft ein Casperjs-Skript, das einige Aktionen in der Webseite ausführt, wenn es fertig ist, speichert einige Daten, hier ist manchmal Ich bekomme mysql Server ist weggegangen, nur wenn die Casperjs dauert ein bisschen länger. Task.php

function doSomeAction(){ 
     $object = Class::findFirstByName("test"); 
     $object->performActionOnWebPage(); 
} 

In Class.php

function performActionOnWebPage(){ 
    $result = exec ("timeout 30s casperjs somescript.js"); 
    if($result){ 
     $anotherObject = new AnotherClass(); 
     $anotherObject->value = $result->value; 
     $anotherObject->save(); 
    } 
} 

Es ist wie die $ anotherObject-> save() scheint; Methode ist von der Zeit exec betroffen ("timeout 30s casperjs somescript.js"); braucht um eine Antwort zu bekommen, wenn es nicht sollte. Es geht nicht um die gespeicherten Daten, da es fehlschlägt und erfolgreich mit der gleichen Eingabe gespeichert wird. Der einzige Unterschied, den ich sehe, ist die Zeit, die casperjs benötigt, um einen Wert zurückzugeben. Es scheint so, als ob phalcon die MySQL-Verbindung während der gesamten Ausführung der "Class.php" -Funktion öffnen würde, was die Zeitüberschreitung bei casperjs zu lange provoziert. Könnten Sie mir helfen, das Problem zu beheben oder einen Workaround zu finden?

Antwort

1

Problem scheint, dass Sie entweder versuchen, schwere Daten in einem einzelnen Paket zu holen, als in Ihrer mysql-Konfigurationsdatei erlaubt, oder Ihr wait_timeout-Variablenwert ist gemäß Ihrer Code-Anforderung nicht richtig eingestellt.

überprüfen Sie Ihre wait_timeout und max_allowed_packet Werte, können Sie überprüfen, indem Sie unter Kommando-

SHOW GLOBAL VARIABLES LIKE 'wait_timeout'; 
SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet'; 

Und diese Werte erhöhen, wie pro Ihre Anforderung in Ihrer my.cnf (linux) or my.ini (windows) Config-Datei und starten Sie MySQL-Dienst.

+0

Ja, das war meine erste Vermutung, aber wenn die Casperjs schnell ist, speichert sie alles ohne Probleme, da es sich um dieselben Daten handelt. Auch sind sehr einfache Daten. – subharb

+0

Das Problem scheint wait_timeout zu sein, da frühere Casperjs mehr Zeit benötigen als diese Variable und jetzt haben Sie Casperjs Code optimiert, so dass es schnell ausgeführt wird und Sie kein Problem bekommen .... Zuerst müssen wir unseren Code optimieren, anstatt DB-Variablen zu ändern blindlings. –

Verwandte Themen