Laravel Queued Job不会等待exec来充实

时间:2015-09-08 14:49:02

标签: php laravel queue exec jobs

我的队列已设置并正常工作(作业运行),但是在进行下一行代码之前,脚本似乎没有等待我的exec行运行。

这意味着我将在接下来的几行中获得例外(因为它正在寻找尚未生成的文件)

我的关闭是:

Queue::push(function($job) use ($gid,$eid)
        {
            $phantomLoc = base_path()."/vendor/bin/phantomjs";
            $scriptLoc = app_path()."/libraries/makeVideo.js";
            $pageAddress = route('image_maker_video', array($gid,$eid));
            $imageName = base_path().'/../data/team_images/'.$gid.'/video-sheets/'.$eid."/";
            $execString = $phantomLoc.' '.$scriptLoc.' '.$pageAddress.' '.$imageName;
            //empty the folder first
            Helpers::emptyFolder($imageName);
            exec($execString, $return_array, $return_value);
            if ($return_value == 0) {
                //now convert image sequence to video
                $outputPath = base_path().'/../data/team_images/'.$gid.'/video-sheets/'.$eid;
                $return_value = Helpers::PNGsToVideo($imageName, $outputPath);
                if ($return_value == 0) {
                    //it worked!!
                    Helpers::emptyFolder($imageName);
                    //rmdir($imageName); 
                    return "video in progress";
                    return Redirect::to('/team_images/'.$gid.'/video-sheets/'.$eid.".mkv");
                } else {
                    Log::error($return_value." - ffmpeg return val");
                    abort(500, $return_value." - ffmpeg return val");
                }
            } else {
                Log::error($return_value." - video phantom return val");
                abort(500, $return_value." - video phantom return val");
            }
            $job->delete();
        });

它似乎直接跳过exec行,虽然我认为它仍在运行。

注意,如果我将驱动程序更改回sync,那么它全部运行完全正常(但显然不在队列中)

知道如何等待exec

1 个答案:

答案 0 :(得分:0)

事实证明exec错误输出,但错误(来自phatomjs)的返回码为0。

原来错误是因为行

$pageAddress = route('image_maker_video', array($gid,$eid));

提供的网址只有localhost而不是localhost:8888

所以我已经攻击它为localhost做一个字符串替换。

不确定为什么将它放入队列会导致laravel提供不正确的网址。但至少它正在发挥作用!