实现 ShouldQueue 的作业不写入数据库
Job which implements ShouldQueue does not write to database
我正在尝试在 Laravel 5.7 中实现基本队列。
我有 运行 创建作业和 failed_jobs 表的迁移。
我已将 .env 更新为 QUEUE_CONNECTION=database 和 QUEUE_DRIVER=database
我用 artisan
创建了一个基本的工作
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class NewJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
sleep(5);
}
}
我正在控制器中调用 NewJob。
NewJob::dispatch();
我有 运行 以下 artisan 命令
php artisan config:cache
php artisan cache:clear
php artisan queue:flush
我没有在寻找要执行的队列,因为作业没有写入数据库。
Larravel.log 中没有错误,/var/log/* 中也没有任何我可以修改的文件。
我不知道去哪里查看或更改什么。我通过重做迁移和在另一个控制器中调用的新作业重做了此实现,但我仍然没有将任何数据写入数据库。
我在 Debian 服务器上使用 Mariadb(InnoDB)。
数据库连接似乎为空
#job: Illuminate\Queue\Jobs\SyncJob {#5458 ▼
#job: null
#payload: "{"displayName":"App\Jobs\NewJob","job":"Illuminate\Queue\CallQueuedHandler@call","maxTries":null,"timeout":null,"timeoutAt":null,"data":{"commandName":"App\ ▶"
#instance: Illuminate\Queue\CallQueuedHandler {#5470 ▶}
#container: Illuminate\Foundation\Application {#2 ▶}
#deleted: false
#released: false
#failed: false
#connectionName: "sync"
#queue: null
}
+connection: null
+queue: null
+chainConnection: null
+chainQueue: null
+delay: null
+chained: []
出于某种原因,.env 文件中的 queue_driver 未被接受,当您通过指定连接调用调度方法时,它会写入数据库。
NewJob::dispatch()->onConnection('database');
我正在尝试在 Laravel 5.7 中实现基本队列。
我有 运行 创建作业和 failed_jobs 表的迁移。
我已将 .env 更新为 QUEUE_CONNECTION=database 和 QUEUE_DRIVER=database
我用 artisan
创建了一个基本的工作<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class NewJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
sleep(5);
}
}
我正在控制器中调用 NewJob。
NewJob::dispatch();
我有 运行 以下 artisan 命令
php artisan config:cache
php artisan cache:clear
php artisan queue:flush
我没有在寻找要执行的队列,因为作业没有写入数据库。
Larravel.log 中没有错误,/var/log/* 中也没有任何我可以修改的文件。
我不知道去哪里查看或更改什么。我通过重做迁移和在另一个控制器中调用的新作业重做了此实现,但我仍然没有将任何数据写入数据库。
我在 Debian 服务器上使用 Mariadb(InnoDB)。
数据库连接似乎为空
#job: Illuminate\Queue\Jobs\SyncJob {#5458 ▼
#job: null
#payload: "{"displayName":"App\Jobs\NewJob","job":"Illuminate\Queue\CallQueuedHandler@call","maxTries":null,"timeout":null,"timeoutAt":null,"data":{"commandName":"App\ ▶"
#instance: Illuminate\Queue\CallQueuedHandler {#5470 ▶}
#container: Illuminate\Foundation\Application {#2 ▶}
#deleted: false
#released: false
#failed: false
#connectionName: "sync"
#queue: null
}
+connection: null
+queue: null
+chainConnection: null
+chainQueue: null
+delay: null
+chained: []
出于某种原因,.env 文件中的 queue_driver 未被接受,当您通过指定连接调用调度方法时,它会写入数据库。
NewJob::dispatch()->onConnection('database');