为什么我的 Laravel 失败作业没有显示在 failed_jobs 表中?

mjp*_*r11 1 laravel

我按照文档创建了一个作业,并在我的handle()中强制失败:

throw new \Exception("Error Processing the job", 1);
Run Code Online (Sandbox Code Playgroud)

结果是预期的失败作业,但失败的作业没有显示在 failed_job 表中。处理时,它会显示在作业表中。

[2020-12-15 07:37:18][6] Processing: App\Jobs\IntroEmailJob
[2020-12-15 07:37:18][6] Failed:     App\Jobs\IntroEmailJob
Run Code Online (Sandbox Code Playgroud)

拉拉维尔 8.0

编辑:在日志中找到这个:

General error: 1364 Field 'uuid' doesn't have a default value
Run Code Online (Sandbox Code Playgroud)

我按照文档的解释创建了 failed_jobs 表:

php artisan queue:failed-table

php artisan migrate
Run Code Online (Sandbox Code Playgroud)

小智 10

我将 failed_jobs 表中的 uuid 字段更改为默认值 Null,现在它可以工作了。

您需要在文件中添加一个driver带有值的参数,因为它将在此处进行检查。database-uuids~/app/config/queue.php

'failed' => [
    'driver' => 'database-uuids',
    'database' => env('DB_CONNECTION', 'mysql'),
    'table' => 'failed_jobs',
],
Run Code Online (Sandbox Code Playgroud)

然后 Laravel 将使用DatabaseUuidFailedJobProvider它来创建 UUID。

接下来您将用于php artisan queue:retry YOUR_UUID重试失败的作业。