Laravel Job / Queue не обрабатывается странным бесконечным циклом

Я пытаюсь создать очередь, но она не работает, когда я бегу php artisan queue:work все, что я получаю в моем терминале,

[2017-11-30 19:56:27] Processing: App\Jobs\ProcessCSV
[2017-11-30 19:56:27] Processing: App\Jobs\ProcessCSV
[2017-11-30 19:56:27] Processing: App\Jobs\ProcessCSV
[2017-11-30 19:56:27] Processing: App\Jobs\ProcessCSV
[2017-11-30 19:56:27] Processing: App\Jobs\ProcessCSV
[2017-11-30 19:56:27] Processing: App\Jobs\ProcessCSV
[2017-11-30 19:56:27] Processing: App\Jobs\ProcessCSV
[2017-11-30 19:56:27] Processing: App\Jobs\ProcessCSV
[2017-11-30 19:56:27] Processing: App\Jobs\ProcessCSV
[2017-11-30 19:56:27] Processing: App\Jobs\ProcessCSV

Это как бесконечный цикл. Идентификатор в моей таблице вакансий тоже растет. Это работает на моем ноутбуке, но не на моем рабочем столе, что очень странно. Я вставил на свой сервер devleopment, и он там тоже не работает.

Мой код ниже, и любая помощь будет оценена.

контроллер

public function upload(Request $request) {
        if($request->file('imported-file')) {

            $user = "craig@boldy.co.uk";

            $file = $request->file('imported-file')->store('uploads', 'public');
            $this->dispatch(new ProcessCSV($file, $user));

            Session::flash('success', 'Your file was uploaded successfully. We will email you once the locations have be imported.');
            return back();

        } else {

            Session::flash('error', 'Please select a file to upload!!!!');
            return back();

        }

    }

работа

public function handle()
    {

        $data = Excel::load($this->file, function($reader) {})->get();

        $apiKey = '';

        foreach($data as $row) {

            if(!empty($row['postcode'])) {

                $url = "https://maps.googleapis.com/maps/api/geocode/xml?address=".urlencode($row['postcode'])."&region=uk&key=";
                $tmp = file_get_contents($url);
                $xml = simplexml_load_string($tmp);

                // print_r($xml); exit;

                if((string)$xml->status == 'OK' && isset($xml->result[0])) {

                    if(isset($xml->result[0]->geometry->location->lat)) {
                        $lat = (string)$xml->result[0]->geometry->location->lat;
                    }

                    if(isset($xml->result[0]->geometry->location->lng)) {
                        $lng = (string)$xml->result[0]->geometry->location->lng;
                    }

                }

                Import::updateOrCreate(
                    [
                        'sitecode' => $row['sitecode']
                    ],
                    [
                        'sitecode' => $row['sitecode'],
                        'sitename' => $row['sitename'],
                        'address_1' => $row['address_1'],
                        'address_2' => $row['address_2'],
                        'address_town' => $row['address_town'],
                        'address_postcode' => $row['postcode'],
                        'charity' => $row['charity'],
                        'latitude' => $lat,
                        'longitude' => $lng,
                        'approved' => 1
                    ]
                );

            }

        }


    }

1 ответ

Решение

Вместо php artisan queue:work... вам нужно добавить параметр param --tries чтобы избежать бесконечного зацикливания.. обычно это происходит, если в работе произошла ошибка. смотрите laravel.log или таблицу невыполненных заданий, если используете базу данных драйверов. это покажет ошибку

php artisan queue:work --tries=3
Другие вопросы по тегам