实现 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');