我有一份在本地工作完美的工作,但在生产中我遇到了它不起作用的问题。handle()
尽管在其他地方部署了许多其他例外,但我已经用 a包含了整个内容,try/catch
并且没有看到任何记录到 Bugsnag 的内容。
public function handle() {
try {
// do stuff
} catch (\Exception $e) {
Bugsnag::notifyException($e);
throw $e;
}
}
根据Laravel Horizon的说法,这个队列作业运行了0.0026001930236816406
几秒钟,我从来没有看到它工作过,也从来没有在failed_jobs
表中看到与这个作业相关的任何其他错误。
配置/队列.php
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'retry_after' => (60 * 10), // 10 minutes
'block_for' => null,
],
配置/horizon.php
'environments' => [
'production' => [
'supervisor' => [
'connection' => 'redis',
'queue' => [
'default',
],
'balance' => 'auto',
'processes' => 10,
'tries' => 3,
// 10 seconds under the queue's retry_after to avoid overlap
'timeout' => (60 * 10) - 10, // Just under 10 mins
],
如果某些原因导致此作业一遍又一遍地重试,我该如何找出原因?我不知所措。
调查至今
- 我的期望是我应该能够运行查询:
SELECT DISTINCT exception, COUNT(id) as errors
FROM failed_jobs
WHERE payload LIKE '%[TAG-JOB-HAS]%'
GROUP BY exception;
要查看更多此错误消息:
作业尝试次数过多或运行时间过长
但这就是我所看到的。
- Laravel Horizon的仪表板显示有问题的作业运行时间 < 1 秒,所以我知道它实际上并没有超时。