Laravel-excel: [BUG] File sementara dibuat di satu server pada ekspor yang antri

Dibuat pada 12 Agu 2020  ·  25Komentar  ·  Sumber: Maatwebsite/Laravel-Excel

Prasyarat

Versi

  • Versi PHP: 7.2
  • Versi Laravel: 7.22.4
  • Versi paket: 3.1.20

Keterangan

File sementara dibuat di satu server pada ekspor yang antri

informasi tambahan

Halo, saya menjalankan aplikasi saya di laravel vapor (tanpa server). Pada ekspor yang antri, file-file sementara tidak disimpan di disk s3. Saya terjebak pada itu!

bug

Komentar yang paling membantu

Berikut adalah contoh seseorang yang menggunakan ekspor antri dengan Vapor: #2434

@patrickbrouwers Terima kasih banyak atas sarannya! Sekarang bekerja seperti pesona!

aku baru saja berubah

'local_path' => sys_get_temp_dir(),
di excel.php
dengan uap disk jarak jauh akan berfungsi seperti ini

Terima kasih atas kesabaran & saran Anda.

Semua 25 komentar

Bisakah Anda menunjukkan apa yang Anda coba, tidak dapat membantu dengan informasi kecil ini.

@patrickbrouwers
'temporary_files' => [

    /*
    |--------------------------------------------------------------------------
    | Local Temporary Path
    |--------------------------------------------------------------------------
    |
    | When exporting and importing files, we use a temporary file, before
    | storing reading or downloading. Here you can customize that path.
    |
    */
    'local_path' => storage_path('app/public'),

    /*
    |--------------------------------------------------------------------------
    | Remote Temporary Disk
    |--------------------------------------------------------------------------
    |
    | When dealing with a multi server setup with queues in which you
    | cannot rely on having a shared local temporary path, you might
    | want to store the temporary file on a shared disk. During the
    | queue executing, we'll retrieve the temporary file from that
    | location instead. When left to null, it will always use
    | the local path. This setting only has effect when using
    | in conjunction with queued imports and exports.
    |
    */
    'remote_disk' => 's3',
    'remote_prefix' => null,

],

ini adalah file konfigurasi saya, di sini saya menentukan disk jarak jauh untuk file sementara, tetapi file sementara tidak disimpan di disk itu

Konfigurasi terlihat bagus. Saya tidak cukup tahu tentang Vapor untuk memberi Anda petunjuk untuk debug, tetapi mungkin file konfigurasi Anda di-cache atau semacamnya. Mungkin orang-orang di Laracasts/Stackoverflow akan lebih cepat membantu.

@patrickbrouwers di mesin lokal saya juga masalah ini akan datang - file sementara tidak disimpan di disk itu (s3)

Coba buka kode dengan xdebug/dd() mungkin ada yang salah dalam konfigurasi Anda yang tidak dapat saya lihat

@patrickbrouwers Saya menemukan satu kasus, file temp sedang menulis di disk, tetapi terjadi chunk read, tidak mengambil file temp dari s3, ada harapan?

@patrickbrouwers ini adalah masalah serupa seperti #2655

Coba atur pengaturan kekuatan itu ke true?

@patrickbrouwers saya tidak bisa melakukannya. karena masalah saya sayangnya vapor tidak mendukung penyimpanan file temp saat dijalankan.
Jadi, mungkin, saya memerlukan dukungan untuk sesuatu yang disebut tanpa server - yaitu file temp membaca dan menulis dari s3/disk apa pun pada pembacaan chunk

Saya percaya ada banyak orang yang menggunakannya di Vapor tanpa masalah

Ini adalah kesalahan yang saya dapatkan saat mencoba ekspor yang antri

ErrorException: fopen(/tmp/storage/framework/laravel-excel/laravel-excel-0KCoC8o8oDS1zsMpu927nkeCTzRgCu1E.xlsx): gagal membuka aliran: Tidak ada file atau direktori seperti itu di /var/task/vendor/phpoffice/phpspreadsheet/sprc/PhpS Penulis/Penulis Dasar. php:111
Jejak tumpukan:

0 [fungsi internal]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'fopen(/tmp/stor...', '/var/task/vendo...', 111, Array)

1 /var/task/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/BaseWriter.php(111): fopen('/tmp/storage/fr...', 'wb+')

2 /var/task/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx.php(186): PhpOffice\PhpSpreadsheet\Writer\BaseWriter->openFileHandle('/tmp/storage/fr...')

3 /var/task/vendor/maatwebsite/excel/src/Writer.php(140): PhpOffice\PhpSpreadsheet\Writer\Xlsx->save('/tmp/storage/fr...')

4 /var/task/vendor/maatwebsite/excel/src/Jobs/QueueExport.php(73): Maatwebsite\Excel\Writer->write(Object(App\Exports\TaskExportTemplate), Object(Maatwebsite\Excel\Files\RemoteTemporaryFile ), 'xlsx')

5 [fungsi internal]: Maatwebsite\Excel\Jobs\QueueExport->handle(Object(Maatwebsite\Excel\Writer))

6 /var/task/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): call_user_func_array(Array, Array)

7 /var/task/vendor/laravel/framework/src/Illuminate/Container/Util.php(37): Illuminate\Container\BoundMethod::Illuminate\Container{closure}()

8 /var/task/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(95): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))

9 /var/task/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(39): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))

10 /var/task/vendor/laravel/framework/src/Illuminate/Container/Container.php(596): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)

11 /var/task/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(94): Illuminate\Container\Container->call(Array)

12 /var/task/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Bus\Dispatcher->Illuminate\Bus{closure}(Object(Maatwebsite\Excel\Jobs\QueueExport))

13 /var/task/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Maatwebsite\Excel\Jobs\QueueExport))

14 /var/task/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(98): Illuminate\Pipeline\Pipeline->then(Object(Closure))

15 /var/task/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(83): Illuminate\Bus\Dispatcher->dispatchNow(Object(Maatwebsite\Excel\Jobs\QueueExport), false)

16 /var/task/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Queue\CallQueuedHandler->Illuminate\Queue{closure}(Object(Maatwebsite\Excel\Jobs\QueueExport))

17 /var/task/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Maatwebsite\Excel\Jobs\QueueExport))

18 /var/task/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(85): Illuminate\Pipeline\Pipeline->then(Object(Closure))

19 /var/task/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(59): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware(Object(Laravel\Vapor\Queue\VaporJob), Object(Maatwebsite \Pekerjaan\QueueExport))

20 /var/task/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(98): Illuminate\Queue\CallQueuedHandler->call(Object(Laravel\Vapor\Queue\VaporJob), Array)

21 /var/task/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(356): Illuminate\Queue\Jobs\Job->fire()

22 /var/task/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(306): Illuminate\Queue\Worker->process('sqs', Object(Laravel\Vapor\Queue\VaporJob), Object (Iluminate\Queue\WorkerOptions))

23 /var/task/vendor/laravel/vapor-core/src/Queue/VaporWorker.php(31): Illuminate\Queue\Worker->runJob(Object(Laravel\Vapor\Queue\VaporJob), 'sqs', Object (Iluminate\Queue\WorkerOptions))

24 /var/task/vendor/laravel/vapor-core/src/Console/Commands/VaporWorkCommand.php(91): Laravel\Vapor\Queue\VaporWorker->runVaporJob(Object(Laravel\Vapor\Queue\VaporJob), ' sqs', Objek (Menerangi\Antrian\PekerjaOptions))

25 [fungsi internal]: Laravel\Vapor\Console\Commands\VaporWorkCommand->handle()

26 /var/task/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): call_user_func_array(Array, Array)

27 /var/task/vendor/laravel/framework/src/Illuminate/Container/Util.php(37): Illuminate\Container\BoundMethod::Illuminate\Container{closure}()

28 /var/task/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(95): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))

29 /var/task/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(39): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))

30 /var/task/vendor/laravel/framework/src/Illuminate/Container/Container.php(596): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)

31 /var/task/vendor/laravel/framework/src/Illuminate/Console/Command.php(134): Illuminate\Container\Container->call(Array)

32 /var/task/vendor/symfony/console/Command/Command.php(258): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\StringInput), Object(Illuminate\Console\OutputStyle ))

33 /var/task/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\StringInput) , Objek(Menerangi\Console\OutputStyle))

34 /var/task/vendor/symfony/console/Application.php(911): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\StringInput), Object(Symfony\Component\Console\Output \BufferedOutput))

35 /var/task/vendor/symfony/console/Application.php(264): Symfony\Component\Console\Application->doRunCommand(Object(Laravel\Vapor\Console\Commands\VaporWorkCommand), Object(Symfony\Component\Console \Input\StringInput), Objek(Symfony\Component\Console\Output\BufferedOutput))

36 /var/task/vendor/symfony/console/Application.php(140): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\StringInput), Object(Symfony\Component\Console \Output\BufferedOutput))

37 /var/task/vendor/laravel/framework/src/Illuminate/Console/Application.php(93): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\StringInput), Object (Symfony\Component\Console\Output\BufferedOutput))

38 /var/task/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\Console\Application->run(Object(Symfony\Component\Console\Input\StringInput), Object (Symfony\Component\Console\Output\BufferedOutput))

39 /var/task/vendor/laravel/vapor-core/src/Runtime/Handlers/QueueHandler.php(60): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\StringInput) , Objek(Symfony\Component\Console\Output\BufferedOutput))

40 /var/task/cliRuntime.php(66): Laravel\Vapor\Runtime\Handlers\QueueHandler->handle(Array)

41 /var/task/vendor/laravel/vapor-core/src/Runtime/LambdaRuntime.php(53): {closure}('afe5516a-587e-5...', Array)

42 /var/task/cliRuntime.php(68): Laravel\Vapor\Runtime\LambdaRuntime->nextInvocation(Object(Closure))

43 /var/task/runtime.php(30): memerlukan('/var/task/cliRu...')

44 /opt/bootstrap.php(6): membutuhkan('/var/task/runti...')

45 {utama}

Sepertinya masih ada yang salah dengan konfigurasi Anda. Itu tidak menggunakan jalur lokal yang benar, itu menggunakan folder temp sistem alih-alih folder penyimpanan Laravel.

@patrickbrouwers Larevel uap penggunaan s3 sebagai penyimpanan default, tapi LARAVEL excel masih membaca dari sistem lokal / server,

@patrickbrouwers Apakah ada batasan teknis yang mencegah dapat membaca file langsung dari s3?

Ya itu akan selalu dibaca dari lokal setelah menyalin dari s3. PhpSpreadsheet hanya dapat membaca dari disk lokal

Dengan konfigurasi yang benar, itu akan berfungsi dengan baik

@patrickbrouwers Dalam uap, tidak ada server...Aws lambda sedang memproses seluruh kode. Jadi, mungkin untuk dukungan excel yang antri, kita perlu meluncurkan server dan mungkin perlu menjalankannya sebagai contoh mikro!

Saya tahu apa itu Vapor dan tanpa server. Saya sarankan Anda mencoba Laracasts atau Stackoverflow, saya rasa kita tidak akan berhasil jika Anda tidak mencoba saran saya.

Saya tahu apa itu Vapor dan tanpa server. Saya sarankan Anda mencoba Laracasts atau Stackoverflow, saya rasa kita tidak akan berhasil jika Anda tidak mencoba saran saya.

Saya mencoba saran Anda dan memeriksa konfigurasi sesuai dokumentasi.
File sementara dibuat pada tahap pertama,
Tetapi ketika kita sampai pada kasus membaca spreadsheet, itu menimbulkan kesalahan ini.

Juga, ketergantungan lain "Laravel snappy" membutuhkan dukungan disk lokal semacam ini.

Tetapi, kasing disk lokal ini tidak akan berfungsi dalam kasus saya!

Jadi, ketika saya menghubungi vapor tentang kasus ini, mereka menyarankan untuk menyimpan file di s3 dan menggunakannya kembali. Apa yang harus saya lakukan ?

Harap Anda mengerti situasi saya!

Orang lain dapat menggunakan file lokal yang disinkronkan dengan s3. Saya tidak bisa membantu lebih dari ini saya minta maaf. Seperti yang saya sarankan beberapa kali, coba forum terkait Laravel.

Berikut ini contoh seseorang yang menggunakan ekspor antri dengan Vapor: https://github.com/Maatwebsite/Laravel-Excel/pull/2434

Saya akan mencoba solusi di atas

Berikut adalah contoh seseorang yang menggunakan ekspor antri dengan Vapor: #2434

@patrickbrouwers Terima kasih banyak atas sarannya! Sekarang bekerja seperti pesona!

aku baru saja berubah

'local_path' => sys_get_temp_dir(),
di excel.php
dengan uap disk jarak jauh akan berfungsi seperti ini

Terima kasih atas kesabaran & saran Anda.

@patrickbrouwers , apakah file-file sementara yang dibuat oleh laravel-excel ini akan otomatis dihapus setelah waktu tertentu? Bagaimana jika saya menetapkan nilai ini sebagai null di excel.php?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat