Я управляю аудио преобразованиями с Laravel Queues а также beanstalkd, контролируется supervisord.
Когда пользователь загружает аудиофайл, он переходит к AudioController.php
что вызывает Queue::push('AudioProcess')
, что само по себе вызывает exec('sh some_script.sh some_audio.mp3')
обработать звук и установить статус модели аудио приложения в 1
когда это будет сделано.
Я сделал кучу загрузок для тестирования, вот записи
1
означает AudioProcess.php
работник был казнен и 0
означает AudioProcess.php
работник не был казнен.
Я предполагаю, что это может быть либо из управления Laravel Queues, либо из beanstalkd, но я не могу найти ничего релевантного в журналах (laravel.log
мой руководитель queue.log
, php_errors.log
).
Я использую промежуточную и производственную среду на одном сервере, поэтому есть два приложения Laravel и, следовательно, два php artisan queue:listen
команды, запущенные одновременно (каждая с --env
указано), если это как-то связано с моей проблемой. Это хорошо сработало несколько недель назад, потом я на некоторое время отказался от проекта и в последнее время восстановил его. Я сделал несколько apt-get update && apt-get upgrade
тоже.
Почему Laravel или beanstalkd не обрабатывают все задания?
Проблема, вероятно, происходила потому, что два php artisan queue:listen
(для каждой среды) отправляли задания в одну и ту же очередь beanstalkd (default
). Это привело к некоторому конфликту, но я не могу сказать больше …
Я исправил это, сделав каждую среду php artisan queue:listen
отправить работу на [environment]
очередь. Поэтому у меня сейчас две очереди, staging
а также production
,
Как это сделать
Создать app/config/[environment]/queue.php
который перезаписывает
[connections => [beanstalkd => [queue]]]
параметр из default
к названию этой среды.
Укажите имя очереди для
Artisan: php artisan queue:listen --queue=[environment]
Других решений пока нет …