2017-04-20 5 views
0

Ich begann mit php-resque() zusammen mit PHP und MySQL-Server. Ich sehe "MySQL Server ist weggegangen" Fehler durch die Arbeiter.php-reque: Arbeiter schlägt mit "MySQL Server ist weg"

Job Queuing-Code:

if ($request->command == 'custom_script') {  
    //error_log("before queue"); 
    Resque::enqueue($queue, 'AsyncTest', array('text'=>'yolo')); 
    //error_log("after queue"); 
} 

Jobklasse:

class AsyncTest{ 
public function setUp() { 
    # Set up something before perform, like establishing a database connection 
    $mysql = Mysql::getInstance(); 
    EH::setErrorHandler(); 
} 

public function perform() 
{ 
//  $mysql = Mysql::getInstance(); 
    // EH::setErrorHandler(); 
    //error_log($this->args['text']); 
    $haiku_step_query= $mysql->query("SELECT id FROM haiku LIMIT 10 OFFSET 1"); 
    $row = $mysql->fetch_assoc($haiku_step_query); 
    $haiku_id = $row['id']; 
} 
public function tearDown() { 
    # Run after perform, like closing resources 
} 
} 

Ich sehe Fehlermeldungen "MySQL Server verschwunden ist":

MySQL ERROR №2006 MySQL server has gone away[qs:SELECT id FROM haiku LIMIT 10 OFFSET 1] 

(/var/www/html/haiku_server/vendor/chrisboulton/php-resque/resque.php line 77 
Resque_Worker->work(5) >> /var/www/html/haiku_server/vendor/chrisboulton/php-resque/lib/Resque/Worker.php line 199 
Resque_Worker->perform(Object) >> /var/www/html/haiku_server/vendor/chrisboulton/php-resque/lib/Resque/Worker.php line 237 
Resque_Job->perform() >> /var/www/html/haiku_server/vendor/chrisboulton/php-resque/lib/Resque/Job.php line 182 
AsyncTest->perform() >> /var/www/html/haiku_server/includes/bgJobs/AsyncThreads.php line 48   
Mysql->query("SELECT id FROM haiku LIMIT 10 OFFSET 1") >> /var/www/html/haiku_server/includes/Mysql.class.php line 113 ) 

Bitte beachten Sie, dass dies nicht passieren, das ist mysql funktioniert gut, wenn ich die Operation ohne php-resque, wie:

if ($request->command == 'custom_script') { 
    $mysql = Mysql::getInstance(); 
    EH::setErrorHandler(); 
    $haiku_step_query= $mysql->query("SELECT id FROM haiku LIMIT 10 OFFSET 1"); 
    $row = $mysql->fetch_assoc($haiku_step_query); 
    $haiku_id = $row['id']; 

}

Antwort

0

Werfen Sie einen Blick auf dieses Problem: https://github.com/chrisboulton/php-resque/issues/269

Eine mögliche Ursache ist, weil nach der Arbeit zum ersten Mal ausgeführt wird, wird bleiben Ihre Objekte in den Speicher geladen, einschließlich Ihrer MySQL-Verbindung . Eine Lösung besteht darin, sich in Ihrer perform-Methode erneut mit MySQL zu verbinden.

+0

Lol, dieser Thread hat meine Interaktion mit einem der Entwickler von php-resque, und seine Lösung hat mein Problem gelöst. Also, wird wahrscheinlich Ihre Antwort akzeptieren. –

Verwandte Themen