мои очереди настроены и работают (задания запускаются), однако скрипт, похоже, не ожидает запуска моей строки 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
?
Оказывается, что exec
выдает ошибку, но ошибка (из phatomjs) дала код возврата 0.
Оказывается, ошибка была из-за линии
$pageAddress = route('image_maker_video', array($gid,$eid));
Предоставлял URL, который только что имел localhost
скорее, чем localhost:8888
Так что я взломал его, чтобы заменить строку для localhost.
Не уверен, почему помещение его в очередь приведет к тому, что laravel предоставит неверные URL. Но, по крайней мере, это работает!
Других решений пока нет …