laravel 5.1 在没有 VM 重启的情况下看不到作业文件的更改

Posted

技术标签:

【中文标题】laravel 5.1 在没有 VM 重启的情况下看不到作业文件的更改【英文标题】:laravel 5.1 not seeing changes to Job file without VM restart 【发布时间】:2015-09-02 01:59:20 【问题描述】:

我在一个 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()

它不再需要任何参数,除非有一个未记录的默认参数。

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

我试过重启nginxphp5-fpmsupervisorbeanstalkd,然后运行:artisan cache:clearartisan clear-compiledartisan optimizecomposer dumpautoload

没有任何作用。

让 laravel 看到 Job 文件的任何更新的唯一方法是重新启动 VM。 vagrant halt,然后是vagrant up

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

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

这是SpecialJob.php文件的完整代码:

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

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

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

【问题讨论】:

您是否在队列工作程序上使用--daemon 标志? @ceejayoz 是的,我是。 您是否按照守护程序文档中的说明运行php artisan queue:restart @ceejayoz,确实看到了,但我认为重新启动主管会做到这一点。 D:当我运行该命令时它更新了! :O 耶!很高兴成功了。 【参考方案1】:

在运行队列工作者as a daemon时,您必须告诉工作者在代码更改后重新启动。

由于守护进程队列工作器是长期存在的进程,它们不会在不重新启动的情况下获取代码中的更改。因此,使用守护队列工作程序部署应用程序的最简单方法是在部署脚本期间重新启动工作程序。您可以通过在部署脚本中包含以下命令来优雅地重新启动所有工作人员:

php artisan queue:restart

【讨论】:

谢谢。这两天一直在敲我的头哈哈! :P 道德:永远不要假设。 天哪,我也遇到了这个奇怪的问题,很高兴看到你的回答。 ***.com/questions/28623001/… 也帮助了我。这看起来很有趣:***.com/a/32851454/470749 运行此命令后它对我不起作用,然后再次排队:工作。旧代码仍然适用。请帮帮我 @NganNguyen 你可能需要重启你的虚拟机。 重启了supervisord,它工作了。 -.-

以上是关于laravel 5.1 在没有 VM 重启的情况下看不到作业文件的更改的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1 - 具有空值的模型上的关系

Laravel系列5.1Blade模板开发

Laravel 5.1 在主机上上传

如何在 Laravel 5.1 中改变环境?

Laravel 5.1 Eloquent isFillable() 单元测试中的差异

解决vSphere 5.1上Linux VM提示:Unable to collect IPv4 routing table问题