我在一个laravel 5.1应用程序中创建了一个新作业,在Homestead VM中运行。我已将其设置为排队并在handle方法中包含代码。
handle()方法之前预期要传递一个参数,但不再需要,我已从handle方法中删除了参数。
但是,当队列运行作业时,我收到错误消息:
=IF(VLOOKUP(ROW()-1, SecondFile!$A1$H11, 7, FALSE)=1, VLOOKUP(ROW()-1, SecondFile!$A1$H11, 4, FALSE), "Value not found")
该文件的第31行是:
[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
它不再期望任何参数,除非有一个没有记录的默认参数。
现在我做了任何更改,包括注释,当我运行队列时,看不到作业文件中的所有内容。我仍然会得到同样的错误。
我尝试重新启动public function handle()
,nginx
,php5-fpm
,supervisor
,然后投放:beanstalkd
,artisan cache:clear
,artisan clear-compiled
,artisan optimize
。
没有任何作用。
我获得laravel以查看更新到Job文件的唯一方法是重新启动VM。 composer dumpautoload
,然后是vagrant halt
。
在这样的控制台命令中触发作业:
vagrant up
以下是$this->dispatch(new SpecialJob($site->id));
文件的完整代码:
我尝试创建另一个新Job并进行测试,得到相同的结果。
所有其他非作业文件立即更新,没有问题。它只是作业文件。就像旧的副本被缓存在我无法找到的地方。
答案 0 :(得分:29)
运行队列工作程序as a daemon时,必须告知工作人员在代码更改后重新启动。
由于守护程序队列工作程序是长期存在的进程,因此它们不会在未重新启动的情况下获取代码中的更改。因此,使用守护程序队列工作程序部署应用程序的最简单方法是在部署脚本期间重新启动工作程序。您可以通过在部署脚本中包含以下命令来优雅地重新启动所有工作程序:
php artisan queue:restart