我的队列已设置并正常工作(作业运行),但是在进行下一行代码之前,脚本似乎没有等待我的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
?
答案 0 :(得分:0)
事实证明exec
错误输出,但错误(来自phatomjs)的返回码为0。
原来错误是因为行
$pageAddress = route('image_maker_video', array($gid,$eid));
提供的网址只有localhost
而不是localhost:8888
所以我已经攻击它为localhost做一个字符串替换。
不确定为什么将它放入队列会导致laravel提供不正确的网址。但至少它正在发挥作用!