【问题标题】:Laravel artisan command doesn't finish properlyLaravel artisan 命令未正确完成
【发布时间】:2018-11-29 19:33:42
【问题描述】:

我有一个处理表中作业的工匠命令。 reverseMatchSystemItem() 方法依次处理特定供应商上下文的所有产品。对于特定的供应商(需要最长的时间),该命令尚未完成。在为所有供应商完成每项操作后(我也只对一个供应商进行了尝试),并且在删除非活动作业后,它继续运行(光标闪烁,错误日志为空!)有趣的是,CPU 使用率不断增加。

public function handle()
{
    $jobs = ReverseMatchProductJobs::all();
    try {
        foreach ($jobs as $job) {
            if ($job->object_type == 'product') {
                foreach (Supplier::all() as $supplier) {
                    $supplier->api()->reverseMatchSystemItem(Item::find($job->object_id));
                }
            } elseif ($job->object_type == 'size') {
                foreach (Supplier::all() as $supplier) {
                    $supplier->api()->reverseMatchSystemItemOption(ItemOption::find($job->object_id));
                }
            }
            $job->active = false;
            $job->save();
        }
        DB::table('reverse_match_product_jobs')->where('active', false)->delete();
        // die();
    } catch (Exception $ex) {
        var_dump($ex);
    }
}

如果我在 delete() 操作之后取消注释 die(),它会正确完成,但我想知道它是否会杀死中间的进程。我怎样才能更好地调试它以了解问题所在?

编辑:Tinker 可以完美运行相同的流程。

【问题讨论】:

  • 你可以用 xdebug 调试任何东西
  • 我应该在这里尝试和调试什么?所有表达式都被执行,它只是等待,如果我尝试在过程中转储值,它们都会返回正常。毕竟它被卡住了。

标签: php laravel laravel-artisan


【解决方案1】:

如果不直接修改查询,这是在 Stackoverflow 上很难回答的问题之一。但是,您的问题是如何调试,所以我将重点介绍:

我会开始:

  • 注释掉内部的 2x foreach 循环,但保留 actionsave 部分。
  • 完成了吗?
  • 如果它完成了,你就知道那些内部循环有些不正常。
  • 如果没有完成,尝试注释掉外层循环,并检查是否完成
  • 等等

除此之外,没有更多信息可以做很多事情

【讨论】:

    猜你喜欢
    • 2015-11-13
    • 2021-09-08
    • 2017-02-09
    • 2016-02-07
    • 1970-01-01
    • 2020-07-24
    • 2020-01-06
    • 2020-10-20
    • 2014-04-19
    相关资源
    最近更新 更多