我正在使用 Laravel Queues 和 beanstalkd 管理音频转换,由 supervisord 监控。
当用户上传音频文件时,会转到触发AudioController.php
的{{1}},Queue::push('AudioProcess')
会触发exec('sh some_script.sh some_audio.mp3')
来处理音频,并将应用音频模型状态设置为{ {1}}完成后。
我做了一堆上传测试,这里是记录
1
表示1
工作程序已被执行,AudioProcess.php
表示0
工作程序尚未执行。
我想它可能来自Laravel Queues管理或beanstalkd,但我在日志中找不到任何相关内容(AudioProcess.php
,我的主管laravel.log
,queue.log
)。< / p>
我正在同一台服务器上运行一个临时和生产环境,因此有两个Laravel应用程序,因此同时运行两个php_errors.log
命令(每个命令都指定了php artisan queue:listen
),如果它与我的问题有关。它几周前运作良好,然后我放弃了一段时间并最近收回了它。我也做了一些--env
。
为什么Laravel或beanstalkd没有处理所有工作?
答案 0 :(得分:3)
问题很可能发生,因为两个php artisan queue:listen
(对于每个环境)都将作业发送到同一个beanstalkd队列(default
)。它导致了某种冲突,但我不能说更多......
我通过让每个环境php artisan queue:listen
将作业发送到[environment]
队列来修复它。因此,我现在有两个队列,staging
和production
。
怎么做
创建一个覆盖的app/config/[environment]/queue.php
来自[connections => [beanstalkd => [queue]]]
的{{1}}参数
到那个环境的名称。
指定队列的名称
工匠:default