Pull to refresh

Gearman и PHP 5.4 (5.6): проблемы и решения

Reading time 2 min
Views 9.4K
В своей предыдущей публикации автор попытался донести до аудитории интересные возможности, который открывает перед PHP-разработчиком сервер очередей Gearman.
В публикации был указан алгоритм установки Gearman и расширения для PHP. Речь шла о PHP 5.3. На Debian7 и PHP 5.4 этот алгоритм не работает, не выдавая при этом никаких ошибок ни при установке, ни при работе PHP-скриптов, однако веб-приложения, использующие Gearman, не работают.

На PHP 5.4 ситуация выглядит так: все устанавливается, все хорошо, все запускается, никаких ошибок. Однако воркеры не добавляют свои задачи на сервер, при этом вот такое
$worker->addFunction();

возвращает true.
Разрыв шаблона.
Очевидное решение — попробовать установить последнюю версию pecl gearman.
Но она не устанавливается, как и в ситуации php5.3 требуется библиотека libgearman версии не ниже 1.* и все.
В чем корень проблемы?
При установке сервера очередей gearman-job-server в систему также устанавливается та самая библиотека libgearman.
Но, как выяснилось, в репозиториях Debian версия gearman-job-server (и версия libgearman) — устаревшая относительно репозитория PECL, и попытка установить последнюю версию pecl gearman дает описнные выше результаты.
Как решить проблему?
Решение 1. Собрать последнюю версию Gearman из исходников
Решение 2.Установить чуть более раннюю версию pecl gearman
Методом проб и ошибок для решения 2 был найден вот такой алгоритм установки сервера очередей Gearman и расширения для PHP 5.4
aptitude install gearman-job-server
aptitude install php-pear
aptitude install make
aptitude install libgearman-dev
pecl install gearman-1.0.3
echo 'extension=gearman.so' > /etc/php5/apache2/conf.d/gearman.ini 
echo 'extension=gearman.so' >/etc/php5/cli/conf.d/gearman.ini


Все ОК. Но есть важный нюанс:
в версии для php5.3 вот такое

$worker->addServer();

или

$worker->addServer('localhost');

нормально работает.
В версии для php5.4 подобные конструкции в коде дают Exception.
Работает вот такая конструкция

$worker->addServer('127.0.0.1', 4730);


Преодолев указанные выше сложности установки и нюансы использования, получаем результат:


В заключение. К чему все эти пляски с бубном в прямом смысле слова? Неужели так нужен Gearman? На этот вопрос отвечу «да», главное — работа с сервером очередей меняет логику самого PHP, упрощая многие операции. Автор анонсирует публикацию «Работа с сервером очередей Gearman», в которой будут рассмотрены приемы построения приложений, логика и веб-приложение для мониторинга и управления.

UPD (03/02/2016): описанный выше способ полностью работоспособен на PHP 5.6 (Debian 8)
Tags:
Hubs:
+1
Comments 13
Comments Comments 13

Articles