Я пытаюсь ежедневно импортировать большой (70k строк) файл .xlsx в свою базу данных с FTP-сервера.На моем локальном сервере Redis задание работает отлично, но как только я помещаю его на свой производственный сервер и отправляю задание, задание, по-видимому, останавливается при фактическом импорте без каких-либо сообщений об ошибках в горизонте.Он просто стоит там.Файл, кажется, импортирован, так как я ранее получал сообщения об ошибках, потому что имя файла на FTP-сервере было неправильным, и функция усечения работает (она удалила некоторые тестовые данные, которые я туда поместил).Я никогда не получал ничего в таблицу с помощью этого метода, даже если количество чанков и пакетов уменьшено до 10. Так что, похоже, проблема заключается в коде импорта или расширении Laravel Excel, но я действительно не могу понять, почемуработает на моем локальном сервере, но не на производстве.Само задание:
public function handle()
{
$downloadcontroller = new DownloadController();
$suffixFileName = '_data.xlsx';
$today = Carbon::today()->toDateString();
$split = explode('-' ,$today);
$fileName = $split[0].$split[1].$split[2].$suffixFileName;
$file = $downloadcontroller->downloadSupplyFile($fileName);
Supply::truncate();
Excel::import(new SuppliesImport(), $file);
return;
}
The SuppliesImport file:
class SuppliesImport implements ToModel, WithBatchInserts,
WithChunkReading, WithHeadingRow
{
public function model(array $row)
{
$data = SupplyTransformer::transform($row);
if (!$data) {
return null;
}
return new Supply($data);
}
public function batchSize(): int
{
return 150;
}
public function chunkSize(): int
{
return 200;
}
}
Функция преобразования:
public static function transform($data)
{
if ($data['isopen'] && !$data['isforeclosure']) {
$data['kvhx'] = $data['kvh'] . '-' . $data['x'];
$chain = Chain::where('external_id', $data['id'])->first();
if (!$chain) {
return null;
}
return [
'kvhx' => $data['kvh'] . '-' . $data['x'],
'current_supply_duration' => date_diff(self::formatDate ($data['fromdate']),
self::formatDate($data['todate']))->days,
'total_supply_duration' => date_diff(self::formatDate($data['xfromdate']), self::formatDate($data['xtodate']))->days,
'chain_id' => $chain->id,
'type' => $data['xid']
];
}
return null;
}
public static function formatDate($date) {
return Date::excelToDateTimeObject($date);
}