laravel 作业/队列没有被处理奇怪的无限循环
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/47581708/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
laravel Job / Queue not been processed weird infinite loop
提问by craigib
I'm trying to create a queue but it doesn't work when I run php artisan queue:work
all I get in my terminal is
我正在尝试创建一个队列,但是当我运行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
It's like an infinite loop. The id in my jobs table just goes up and up too. It does work on my laptop but not on my desktop which is very strange. I put in onto my devleopment server and it doesn't work on there either.
这就像一个无限循环。我的工作表中的 id 也越来越高。它可以在我的笔记本电脑上运行,但不能在我的台式机上运行,这很奇怪。我安装到我的 devleopment 服务器上,它也无法在那里工作。
My code is below and any help would be appreciated.
我的代码如下,任何帮助将不胜感激。
Controller
控制器
public function upload(Request $request) {
if($request->file('imported-file')) {
$user = "[email protected]";
$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();
}
}
Job
工作
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
]
);
}
}
}
回答by ZeroOne
instead of php artisan queue:work
..you need to add option param --tries
to avoid infinite looping.. it usually occurred if error happen in job. see laravel.log or failed-job table if using driver database. it will show the error
而不是php artisan queue:work
..你需要添加选项参数--tries
以避免无限循环..如果作业中发生错误,通常会发生。如果使用驱动程序数据库,请参阅 laravel.log 或 failed-job 表。它会显示错误
php artisan queue:work --tries=3