【问题标题】:Laravel Queued Job doesn't wait for exec to copleteLaravel 排队作业不等待 exec 完成
【发布时间】:2015-09-08 14:49:01
【问题描述】:

我的队列设置完毕并开始工作(作业开始运行),但脚本似乎没有等待我的 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吗?

【问题讨论】:

  • 你是什么意思下一步?这是否意味着下一个排队的工作?还是下一行代码?
  • 下一行代码,直接进入 if 语句
  • 问题已相应编辑和更新,谢谢!
  • 你是不是为了检查它是否因为错误而没有立即完成而放弃了 exec 命令?
  • 刚刚拆开,奇怪的是它返回0。会不会想到一个错误会给我另一个代码?

标签: php laravel queue exec jobs


【解决方案1】:

原来exec 出错了,但错误(来自 phatomjs)的返回码为 0。

原来错误是因为这条线

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

提供的网址仅包含 localhost 而不是 localhost:8888

所以我已经破解了它来为本地主机做一个字符串替换。

不知道为什么将它放入队列会导致 laravel 提供不正确的 url。但至少它起作用了!

【讨论】:

  • Laravel 从队列生成的路由是基于你在 .env 文件中告诉它的。 APP_URL 设置是控制这个的。在上面的示例中,它应该设置为APP_URL=http://localhost:8888/,以便为您的路由生成正确的 URL。 Mail::queue 和其他此类命令也是如此(如 $request、request() 和 Request() 不能通过 CLI 使用)。
猜你喜欢
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
  • 2019-01-14
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
相关资源
最近更新 更多