我正在分派一个作业,根据我的 .env 配置,它应该进入作业表 (
QUEUE_DRIVER=database
)
但是,例如,作业表中没有出现任何内容,并且作业甚至没有在同步模式下运行。我看过
queue:listen
,Laravel 日志文件,failed_jobs 表也为空。请帮助我,我的工作没了
OBS: 更改 .env 文件后,我正在运行
artisan config:clear
,然后重新启动 PHP FPM 服务
我注意到的一件事是,当我将 QUEUE_DRIVER 设为
sync
时,它会运行我已分派的所有作业,即使它们没有进入作业表
我失去了什么吗?
我今天在 lumen 8.x 中遇到了同样的问题。 我正在使用
dispatch(new ExampleJob);
排队,所以在花了一些时间谷歌搜索但没有成功后,我决定用 dispatch(new ExampleJob);
替换 Queue::push(new ExampleJob);
。
我的 vscode 代码编辑器抛出未知类错误,因此我在类顶部添加了 use Illuminate\Support\Facades\Queue;
,然后作业开始正常排队。
有关更多详细信息,请参阅调度作业部分。我希望这对那里的人有帮助。
如果您将队列与数据库驱动程序一起使用,并且您的项目处理多个数据库连接, 也许您的队列表不在默认连接中,在这种情况下,您应该确保在队列连接配置中正确设置数据库连接配置。
在我的例子中,将作业添加到队列时,请求达到了最大执行时间。
多次检查队列配置后,我注意到使用“队列连接”的“数据库连接”设置不正确。
在我的.env中:
QUEUE_CONNECTION=database
在配置/队列中:
'default' => env('QUEUE_CONNECTION', 'database'),
'connections' => [
'sync' => [
'driver' => 'sync',
],
'database' => [
'driver' => 'database',
'connection' => 'sync', //<-- "sync" is my database connection name, it could also be "mysql" or "my_own_custom_database_connection", enter your DB connection that has your jobs table
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90,
'after_commit' => false,
],
** 注意关键connections.database.connection 中的注释,它说:
“sync”是我的数据库连接名称(但它不是默认的 项目),也可以是“mysql”或 “my_own_custom_database_connection”,输入您的数据库连接 你的工作表。
我知道,通过错误地指定连接,请求永远不会结束,并达到 max_execution_time
当您将 QUEUE_DRIVER 设置为同步时,调度的作业将立即运行,并且不会插入到作业表中。 因此,您应该将其设置为“数据库”以获得所需的操作。