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'])."®ion=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