Laravel 5.1 - 在后台

时间:2016-03-15 13:13:25

标签: php laravel symfony-process

我有一个使用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秒。

&安培;作业处理代码预计将同时执行多次,分别对应于用户请求。所以我怀疑如果队列工作正常或我还有其他更好的选择。如果是这样,请建议。

2 个答案:

答案 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"
});

无论如何我不知道它是否适合你?