PHP and Gearman: Unable to connect after upgrade
Installing Gearmand and Pecl Gearman on Ubuntu 12.10
First up: the version of gearman in aptitude isn’t new enough to match the (lovely, shiny) new version in pecl. This problem will solve itself with future releases and is just the result of the different speeds that releases get to users via different channels. To get this all set up, I used the excellent tutorial I found here: http://www.phamviet.net/2012/10/10/ubuntu-php-5-4-x-and-gearman-troubleshooting.
After working through this tutorial, I was able to install the pecl gearman extension at the newest version (1.1.1) successfully.
Dealing with “Unable to connect” error
The code I was trying to run is pretty hardened, it’s been in production for nearly two years – yet it just did not work after upgrade and the error “unable to connect” made it sound more like a gearman problem than a PHP one, so I didn’t spot the issue straight away. The exact error from my logs:
PHP Warning: GearmanClient::doBackground(): send_packet(GEARMAN_COULD_NOT_CONNECT) Failed to send server-options packet -> libgearman/connection.cc:430
In fact, what happened was that the GearmanClient::addServers()
method now requires that the port also be specified with an IP address, in the format 127.0.0.1:4730
whereas previously it would take an IP address and assume the default port number. I simply changed my previous code:
$client->addServers('127.0.0.1');
To the updated version like this:
$client->addServers('127.0.0.1:4730');
And all was well. It’s a tricky thing to track down so I hope this helps if it happened to you! I also went back and edited the previous code samples on this blog in attempt to have other people avoid the issue.
Nice and easy catch. Thanks for sharing :-D
Whoa! this has saved me a lot of hair pulling. Would have never figured out why default port is not working….
Great article… we are currently running on gearman 1.0.x and we do not use port numbers ;-) this would cause a lot of trouble in future.
Thanks for your hint, just had this problem and remembered your blogpost. I guess that saved me a few hours of bug-searching.
After adding host and port number i’m getting this error.
Warning: GearmanClient::addServer(): gearman_connection_create_args(GEARMAN_GETADDRINFO) -> libgearman/connection.cc:211 in /var/www/html/gearman/client.php on line 10
any help?
instead of $client->addServers(‘127.0.0.1:4730’);
try $client->addServers(‘127.0.0.1’,4730);