ローカルでは問題なく動作するジョブがありますが、本番環境では動作しない問題が発生します。全体handle()
を atry/catch
で囲みましたが、他の場所で展開されていない他の多くの例外にもかかわらず、Bugsnag に何も記録されていません。
public function handle() {
try {
// do stuff
} catch (\Exception $e) {
Bugsnag::notifyException($e);
throw $e;
}
}
Laravel Horizonによると、このキュー ジョブは数秒間実行されますが、このジョブに関連するため、それが機能することはなく、テーブル0.0026001930236816406
に他のエラーが表示されることもありません。failed_jobs
config/queue.php
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'retry_after' => (60 * 10), // 10 minutes
'block_for' => null,
],
config/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 秒未満実行されていることを示しているため、実際にはタイムアウトしていないことがわかります。