Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.2队列和作业-不推送到作业数据库_Php_Mysql_Laravel_Curl_Laravel 5.2 - Fatal编程技术网

Php Laravel 5.2队列和作业-不推送到作业数据库

Php Laravel 5.2队列和作业-不推送到作业数据库,php,mysql,laravel,curl,laravel-5.2,Php,Mysql,Laravel,Curl,Laravel 5.2,编辑2: 以下是我们正在经历的步骤: 运行计划(为每个公司创建CollectHistoricalData作业) CollectHistoricalData应推送到队列(jobstable) CollectHistoricalData有一个函数ApiDaemon::GetCompanyWithQuery($company,$query),该函数从一个单独的类运行,该类也在其他几个地方引用 GetCompanyWithQuery收集数据并将其插入数据库 它一直运行到fine,但挂起的不是将作业插入到

编辑2:

以下是我们正在经历的步骤:

  • 运行计划(为每个公司创建
    CollectHistoricalData
    作业)
  • CollectHistoricalData
    应推送到队列(
    jobs
    table)
  • CollectHistoricalData
    有一个函数
    ApiDaemon::GetCompanyWithQuery($company,$query)
    ,该函数从一个单独的类运行,该类也在其他几个地方引用
  • GetCompanyWithQuery
    收集数据并将其插入数据库
  • 它一直运行到fine,但挂起的不是将作业插入到jobs表中,而是一个接一个地同步运行


    编辑1:

    .env
    文件设置为使用
    数据库
    队列驱动程序
    ,我甚至尝试在
    config/QUEUE.php
    文件中对其进行编码


    我们正在使用Laravel5.2进行一个项目。在这个项目中,我们需要每小时卷曲一个url并将数据保存到数据库中。起初,我们使用Cron作业,基本上在一分钟内完成数千个卷发,这会由于负载而使PHP崩溃

    我们决定转到拉威尔的工作和排队,但没有成功。我们正在为我们的工作使用数据库驱动程序,并尝试了许多不同的方法将工作放入数据库,因此我们的守护进程工作人员可以处理它们

    这是我们现在的代码,我们正在使用Kernel.php
    $schedule
    启动这项工作,因此我们不会有数百个请求试图在一个小时内发生,这会导致数万次卷曲

    Kernel.php时间表:

        $schedule
            ->call(function () {
                $items = DB::select('{selecting certain things to run}');
                foreach ($items as $q) {
                    $this->dispatch(new CollectHistoricalData(Company::find($q->company_id), ApiQuery::find($q->query_id)));
                }
            })
            ->hourly()
            ->name('Historical Pulls')
            ->withoutOverlapping()
            ->before(function() {
                $this->startTime = Carbon::now();
            })
            ->after(function () {
                mail({mail us a report afterward});
            });
    
    当它运行时,它会坐在那里一个接一个地运行它们,而不是将它们推到创建的Jobs表中

    CollectHistoricalData.php:

    <?php
    
    namespace App\Jobs;
    
    use App\Helpers\Daemons\ApiDaemon;
    use App\Jobs\Job;
    use App\Models\Company;
    use App\Models\ApiQuery;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Queue\InteractsWithQueue;
    use Illuminate\Contracts\Queue\ShouldQueue;
    
    class CollectHistoricalData extends Job implements ShouldQueue
    {
        use InteractsWithQueue, SerializesModels;
    
        protected $company, $query;
    
    
        /**
         * CollectHistoricalData constructor.
         * @param Company $company
         * @param ApiQuery $query
         */
        public function __construct(Company $company, ApiQuery $query)
        {
            $this->company = $company;
            $this->query = $query;
        }
    
        /**
         * Execute the job.
         *
         * @return void
         */
        public function handle()
        {
            mail({let us know what started and when});
            QueryDaemon::GetCompanyWithQuery($this->company, $this->query);
        }
    
        public function failed()
        {
            mail({mail us letting us know it failed});
        }
    
    
    }
    
    嗯。。。我是哑巴

    php artisan配置:清除

    我没有清除配置的缓存。。。。哇…

    就像

    php artisan config:clear
    
    不适用于我我可以通过以下方式实现:

    php artisan config:cache
    

    在Laravel6.x中,在/env:QUEUE\u CONNECTION=sync=>QUEUE\u CONNECTION=database中编辑此项
    然后处理数据可以插入作业表

    .env
    文件中指定的
    队列驱动程序
    是什么?
    队列驱动程序
    .env
    文件中设置为
    数据库
    ,而且我甚至尝试在
    配置/QUEUE.php
    文件中以这种方式进行硬编码($q->company\u id)
    ApiQuery::find($q->query\u id)
    正在做应该排队的工作?这会在内核中立即被调用,结果会被传递到作业类中。是的,每次都会找到公司和apiQuery,我看到他们在处理api信息并将其插入数据库,但它会一次处理一个,而不是将它们推入数据库队列。听起来您需要将
    公司
    ApiQuery
    代码移动到
    句柄()中
    排队作业的方法,这是排队后运行的唯一方法。这对我来说很有效。我不确定这是怎么回事。有人能解释一下吗?@grez您的配置信息可能已缓存在生产中,因此您必须清除缓存才能使更改生效