为什么我的Laravel失败作业没有显示在失败作业表中?
我按照文档创建了一个作业,并在句柄()中强制失败: 结果是出现预期的失败作业,但失败作业未显示在failed_job表中。处理时,它将显示在作业表中为什么我的Laravel失败作业没有显示在失败作业表中?,laravel,Laravel,我按照文档创建了一个作业,并在句柄()中强制失败: 结果是出现预期的失败作业,但失败作业未显示在failed_job表中。处理时,它将显示在作业表中 [2020-12-15 07:37:18][6] Processing: App\Jobs\IntroEmailJob [2020-12-15 07:37:18][6] Failed: App\Jobs\IntroEmailJob 拉威尔8.0 编辑: 在日志中找到: General error: 1364 Field 'uuid' do
[2020-12-15 07:37:18][6] Processing: App\Jobs\IntroEmailJob
[2020-12-15 07:37:18][6] Failed: App\Jobs\IntroEmailJob
拉威尔8.0
编辑:
在日志中找到:
General error: 1364 Field 'uuid' doesn't have a default value
我创建了failed_jobs表,正如文档所解释的:
php artisan queue:failed-table
php artisan migrate
我将failed_jobs表中的uuid字段更改为默认值Null,现在它可以工作了
有人能解释为什么artisan命令不考虑这一点以及uuid的用途吗?将
队列\u FAILED\u驱动程序设置为数据库uuid将解决您的问题
我将failed_jobs表中的uuid字段更改为默认值Null,现在它可以工作了
您需要在~/app/config/queue.php文件中添加一个参数driver
,其值为database uuids
'failed' => [
'driver' => 'database-uuids',
'database' => env('DB_CONNECTION', 'mysql'),
'table' => 'failed_jobs',
],
Laravel将使用能够创建UUID的数据库UUIDFailedJobProvider
接下来,您将使用php artisan队列:重试失败作业的\u UUID
。只有在所有重试都已完成后,才会将其写入failed\u jobs
表,您允许重试多少次?您可以阅读更多关于它的内容。表中仍然没有条目。顺便问一下,默认的尝试次数是多少?@mjpsr11自Laravel6.0以来,默认的尝试次数是一次。较旧版本的Laravel尝试了无限期(尽管通常在255次尝试后导致数据库值异常)。如果您升级了现有项目,但没有使queue.php
config文件与最新版本保持同步,然后在升级后运行artisan queue:failed table
,您可能最终处于配置没有“驱动程序”=>“数据库uuid”
的状态。基本上,您有较新的数据库模式,但有较旧的配置,这使得Laravel尝试使用较旧版本的一些行为(在添加uuid字段之前)。新项目不会遇到这个问题,升级之前发布并迁移失败作业(不更新配置)的旧项目也不会遇到这个问题。这是我的配置:'driver'=>env('QUEUE\u FAILED\u driver','database uuids')
是否可以在QUEUE\u FAILED\u driver
环境变量中设置某些内容,或者缓存配置?(php-artisan-config:clear
)更仔细地阅读您的评论,我可能有这种情况。我确实将Laravel升级到了8.0,之后可能已经迁移了队列表。我相信当变量为空时,这已经是默认值,这可能表明他们的配置文件根本没有设置driver
字段,这意味着它没有检查queue\u FAILED\u driver
变量。laravel附带的队列配置的旧版本不包括驱动程序字段。
'failed' => [
'driver' => 'database-uuids',
'database' => env('DB_CONNECTION', 'mysql'),
'table' => 'failed_jobs',
],