我有一个使用Laravel 5.1编写的Web应用程序,当用户请求某个页面或单击按钮时,它会运行脚本。这应该在后台激活脚本。我曾尝试使用Jobs&队列。
这是我的代码块: myjob.php
class myjob extends Job implements SelfHandling, ShouldQueue {
use InteractsWithQueue, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//
set_time_limit(0);
$this->writeJobLogs('Error', 'Start Execution');
//Job Processing Code
$this->writeJobLogs('Error', 'End Execution');
}
}
Controller.php这样
class ManageController extends Controller {
public function testJob(){
$this->dispatch(new myjob());
}
}
作业处理代码预计至少需要10分钟才能执行。 现在,当我运行代码时,它会抛出错误,然后在下面给出:
[Symfony的\元器件\过程\异常\ ProcessTimedOutException] 过程"" C:\ wamp \ bin \ php \ php5.5.12 \ php.exe" "人员" queue:work --queue ="默认" --delay = 0 --memory = 128 --sleep = 3 --tries = 0 --env =" local""突破 超时60秒。
&安培;作业处理代码预计将同时执行多次,分别对应于用户请求。所以我怀疑如果队列工作正常或我还有其他更好的选择。如果是这样,请建议。
答案 0 :(得分:1)
Laravel Queue不会在后台运行进程,而是让您能够将执行推迟到以后的时间。您的脚本超时,因为它超过了php.ini中指定的最长执行时间。
答案 1 :(得分:0)
让我想到的第一个解决方案(可能不适合您)将在控制器内部的单独功能上设置日志记录命令,例如。
public function writeLog()
{
// Do your logging here
}
并对指向这些函数的路径进行AJAX调用,例如;
// Laravel Route
Route::get('ajaxDoStuff', 'FooController@writeLog');
// AJAX on Blade Template
$.ajax({
//all the usual stuff for an AJAX call
url: "/ajaxDoStuff"
});
无论如何我不知道它是否适合你?