Я застрял в очередях Laravel .. Я делаю все в соответствии с документацией, но каждый раз, работа в очереди помещается в таблицу невыполненных работ.
Я пытаюсь поставить в очередь работу, которая будет импортировать CSV-файл в базу данных.
В файле .env я сделал QUEUE_DRIVER = база данных. (P.S. Я использую базу данных для своих очередей, на своем локальном хосте я использую PHP версии 5.5.3 на своем Mac). Задания создаются в базе данных, но это не удается.
Код в моем контроллере
if($request->hasFile('import_file')){
$country = MemberProfile::where('username',$username)->first(['country']);
$csvname = $username.".".$request->file('import_file')->getClientOriginalExtension();
$csvpath = base_path() . '/public/assets/memberCollection/';
$request->file('import_file')->move($csvpath, $csvname);
$data = new importDataJob;
$data->path = $csvpath."".$csvname;
$data->listindex = $listindex;
$data->country = $country->country;
$data->username = $username;
$data->save();
$this->dispatch(new ImportLeads($data));}
И код в файле задания ImportLead.php это —
protected $impStuff;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(importDataJob $values)
{
$this->impStuff = $values;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
try{
$data = Excel::load($this->impStuff->path, function($reader) {
})->get();
Storage::disk('local')->append('logtest.txt', $this->impStuff->path);
//Inserting record by record into database
if(!empty($data) && $data->count()){
foreach ($data as $key => $value) {
$member = new MemberController();
//dd($this->impStuff["country"]);
$number = $member->E164FormatNumber($value->mobile,$this->impStuff->country);
$leadlistassoc_insert[] = ['listindex' => $this->impStuff->listindex, 'leadindex' => DB::table('leads')->insertGetId(['firstName' => $value->firstname, 'lastName' => $value->lastName, 'mobile' => $number, 'username' => $this->impStuff->username, 'created_at' => Carbon::now(), 'category' => 1])];
}
if(!empty($leadlistassoc_insert)){
DB::table('leadlistassoc')->insert($leadlistassoc_insert);
}
}
}
catch(Exception $e){
Storage::disk('local')->append('logtest.txt', $e);
}
}
public function failed()
{
Storage::disk('local')->append('logtest.txt', "failed");
}
Тот же код работает, если я помещаю его в другой класс и вызываю его функцию-обработчик вручную.
Используя команду Laravel 5.2 для прослушивания базы данных:
php artisan queue:listen --tries=3
Задача ещё не решена.
Других решений пока нет …