laravel 5.1 在未重新启动 VM 的情况下看不到对作业文件的更改

2022-08-30 19:35:19

我在 laravel 5.1 应用中创建了一个新作业,在 Homestead VM 中运行。我已将其设置为排队,并在句柄方法中包含代码。

handle() 方法以前期望传递一个参数,但不再需要,我已经从 handle 方法中删除了参数。

但是,当队列运行作业时,我收到一个错误,说:

[2015-06-17 14:08:46] local.ERROR: exception 'ErrorException' with message 'Missing argument 1 for Simile\Jobs\SpecialJob::handle()' in /home/vagrant/Code/BitBucket/simile-app/app/Jobs/SpecialJob.php:31

该文件的第 31 行是:

public function handle()

它不再期望任何参数,除非有一个没有记录的默认参数。

现在,当我运行队列时,我所做的任何更改(包括注释掉作业文件中的所有内容)都看不到。我仍然会得到同样的错误。

我尝试重新启动 、 和运行: 、 、 、 。nginxphp5-fpmsupervisorbeanstalkdartisan cache:clearartisan clear-compiledartisan optimizecomposer dumpautoload

没有任何效果。

我获得 laravel 查看作业文件的任何更新的唯一方法是重新启动 VM。然后。vagrant haltvagrant up

作业在控制台命令中触发,如下所示:

$this->dispatch(new SpecialJob($site->id));

以下是该文件的完整代码:SpecialJob.php

http://laravel.io/bin/qQQ3M#5

我尝试创建另一个新作业并进行测试,我得到相同的结果。

所有其他非作业文件都会立即更新,没有问题。它只是作业文件。就像一个旧副本被缓存在我找不到的地方。


答案 1

将队列工作线程作为守护程序运行时,必须告诉工作线程在代码更改后重新启动。

由于守护进程队列工作线程是长期存在的进程,因此如果不重新启动,它们将无法拾取代码中的更改。因此,使用守护进程队列工作线程部署应用程序的最简单方法是在部署脚本期间重新启动工作线程。您可以通过在部署脚本中包含以下命令来正常重新启动所有工作线程:

php artisan queue:restart

答案 2

推荐