Laravel任务调度器错误:appendOutputTo

6

我在控制台/内核中添加了以下代码:

protected function schedule(Schedule $schedule)
{
    $schedule->command('queue:work')
             ->everyMinute()
             ->appendOutputTo($filePath);
}

然后我在命令提示符中运行了以下Artisan命令来运行预定任务,但我收到以下错误。
php artisan schedule:run

错误:

 [Symfony\Component\Debug\Exception\FatalErrorException]
 Call to undefined method Illuminate\Console\Scheduling\Event::appendOutputTo()

当我使用->sendOutputTo($filename)时,它可以正常工作,当然它不会追加而是覆盖文件。
谢谢,
K

请问为什么您要使用任务计划程序来运行队列?为什么不使用Supervisor呢?关于您的问题:我能找到的唯一信息是这个链接,它指向手册http://laravel.com/docs/5.1/scheduling#task-output。在注释中提到了以下内容:注意:emailOutputTo和sendOutputTo方法仅适用于command方法,不支持call方法。 - Jirennor
@ThomasSnijder,我认为我使用任务计划程序是因为我希望调度逻辑子版本化在我的Laravel中。您为什么认为我们不能/不应该使用任务计划程序来运行队列? - karmendra
1
队列通常用于处理那些不需要立即执行的耗时任务,比如发送一封电子邮件。你可以轻松地延迟30至60秒来完成它。任务用于在固定时间执行重复操作,比如清理数据库表或其他操作。我只想告诉你,你可以使用Supervisor运行队列,而不需要使用任务调度程序来完成。但是,如果你想使用任务调度程序完成它,我认为没有任何缺点。 - Jirennor
另一个想法。如果你真的想将队列的输出附加到文件中,也许你可以将这个逻辑构建到你的队列任务中?这样你就不需要使用appendOutputTo方法了。 - Jirennor
@ThomasSnijder,我不理解The emailOutputTo和sendOutputTo方法仅适用于command方法,不支持call,这里的“call”是什么意思?而且我确定你已经注意到我使用了文档页面中完全相同的代码。我可以尝试创建一个队列作业。(所以看起来appendOutputTo不存在是个bug,对吗?) - karmendra
Call在任务调度中像函数一样使用。而command用于在命令行上实际执行命令。文档中有示例。http://laravel.com/docs/5.1/scheduling。我不知道这是否是一个错误。但我希望你可以在命令上使用appendOutputTo方法,因为它几乎与sendOutputTo相同。 - Jirennor
1个回答

2

没错,我说得对,Laravel 5.1中没有appendOutputTo()函数。

好消息是在Laravel 5.2中将会有此函数。

laravel-news-5.2-whats-coming

更新:2015年12月10日 正如sstarlight所提到的,并且我也重新检查过(搜索了appendOutputTo函数),是的,现在它已经存在于vendor/laravel/framework/src/Illuminate/Console/Scheduling/Event.php中,而以前不存在。 感谢Laravel和sstarlight让我们知道这个信息。


1
我使用Laravel 5.1中的appendOutputTo,并且它完美地工作。请参阅http://laravel.com/docs/5.1/scheduling#task-output文档。$filePath>您是否定义了它? - ssuhat
你可以升级到最新版本的 Laravel 5.1,该功能将会存在,如果你不想因为任何原因完全迁移到 Laravel 5.2。 - Pnar Sbi Wer
你说得对,这是自去年12月以来的情况。他们在去年12月修补了v5.1,这就是我的更新意味着的。 - karmendra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接