Laravel Excel работа с чанками с Horizon - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь ежедневно импортировать большой (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);
}
...