Cache Magento 2.2.x dinonaktifkan secara otomatis

16

Pertama-tama, saya tidak dapat menemukan info tentang masalah seperti ini di web.

Kami memiliki lingkungan produksi dengan integrasi git . Kami menarik perubahan kami hanya melalui git ( git pull ).

Masalahnya adalah, entah bagaimana dalam salah satu langkah Magento cache dinonaktifkan secara otomatis (semua nol saat memeriksa cache: status) . Itu menyebabkan masalah jika hal ini terlewatkan melalui programmer yang menyebabkan server overload karena lalu lintas tinggi 'bashing' ke Magento tanpa cache.

Mungkin sebagian dari Anda pernah melihat masalah ini sebelumnya? Kami tidak tahu kapan atau bagaimana tepatnya itu terjadi.
Dan itu agak muncul secara acak.

Langkah-langkah biasa yang kami lakukan:

  • memungkinkan pemeliharaan
  • git pull
  • pemasangan komposer (jika perlu)
  • modul mengaktifkan Vendor_ModuleName (jika perlu)
  • setup: upgrade (jika perlu)
  • membersihkan barang-barang statis
  • perintah penyebaran
  • membersihkan kliring
  • membersihkan opcache
  • menonaktifkan pemeliharaan

Saya akan sangat menghargai saran berharga yang dapat membantu menyelesaikan masalah seperti ini.

Macas
sumber
Jika Anda melakukannya setup:upgrademaka cache akan dinonaktifkan secara otomatisu
Amit Bera
@AmitBera Saya harus tidak setuju dengan Anda, bahkan jika saya menginterupsi koman ini, itu tidak akan mengubah cache
Macas
Baik. Saya akan melakukan tes .... lihat periksa screnerio
Amit Bera

Jawaban:

16

Ini terlihat seperti masalah yang diketahui :
Ini memang terjadi dari waktu ke waktu pada proyek yang saya kerjakan, tetapi saya tidak dapat menemukan langkah-langkah untuk mereproduksi. Yang bisa saya katakan adalah itu terjadi selama proses penyebaran.
Yang dapat saya temukan adalah bahwa dalam keadaan tertentu suatu file .regenerateditulis dalam varfolder (baik pada pengaturan upgrade atau komposer instal / upgrade) dan jika file itu ada saat menjalankan setup:di:compilecache dinonaktifkan dan diaktifkan kembali ketika proses kompilasi selesai.
Untuk beberapa alasan, terkadang cache tidak diaktifkan kembali.
Kami mengambil pendekatan yang cepat dan kotor dan memastikan langkah terakhir dari proses penempatan php bin/magento cache:enable. Jadi pada dasarnya kami menyembunyikan kotoran di bawah permadani.

Anda dapat menemukan kode yang menonaktifkan cache di sini.
Itu dibungkus dengan TODO: removepernyataan.

Marius
sumber
1
dapat mengkonfirmasi. menyembunyikannya di bawah permadani ketika itu terjadi
Philipp Sander
Ok, sepertinya aku bukan satu-satunya dengan ini. Kami biasanya mendapatkan ini saat terjadi kesalahan dan proses penerapan macet. Dengan melihat info Anda, inilah masalahnya. Terima kasih atas informasinya, menandai yang ini sebagai jawaban.
Macas
Adakah yang mendapatkan solusinya?
Manish Goswami
5

Bagi siapa pun yang tertarik, saya pikir saya bisa menjelaskan masalah ini. Tampaknya menjadi masalah konkurensi (kondisi ras) di \ Magento \ Framework \ Code \ GeneratedFiles :: cleanGeneratedFiles, ketika flag var / .regenerate diatur, dan lebih dari satu proses / permintaan mencoba untuk membersihkan file yang dihasilkan .

Ini lebih mungkin terjadi ketika Anda mengaktifkan cron, dan banyak grup cron menggunakan config use_separate_process. Ketika lebih dari satu proses mencoba untuk membersihkan yang sama, FileIterator gagal dengan pesan berbeda yang mirip dengan:FilesystemIterator::__construct(/Users/adrianmartinez/Sites/r2-project-develop-b2b/environments/2-2-develop-b2b/magento/generated/code): failed to open dir: No such file or directory.

Memindahkan panggilan ke $this->write->delete(self::REGENERATE_FLAG);, tepat setelah tanda keberadaan ditandai untuk menyelesaikan masalah, karena proses kedatangan pertama menandai dirinya sebagai yang bertanggung jawab untuk membersihkan file.

Saya meninggalkan di sini video demo tentang cara mereplikasi masalah : https://youtu.be/9-X1cIIY7y8

Dan skrip yang digunakan untuk itu:

#!/bin/bash

# \Magento\Framework\Code\GeneratedFiles has a concurrency problem
# Create regenerate flag and launch parallel commands that try to regenerate at the same time
# This is a real case, cron:run launches stand alone processes in parallel

# Created by magento composer installer upon code install or module enable/disable
touch var/.regenerate

# Launch parallel commands
# Error differs each execution, sometimes it even works
bin/magento cron:run --group=ddg_automation --bootstrap=standaloneProcessStarted=1 2>&1 &
bin/magento cron:run --group=index --bootstrap=standaloneProcessStarted=1 2>&1 &

wait
echo "All done"
Adrián Martínez Guantes
sumber
Apakah Anda menemukan solusinya?
Manish Goswami
Saya menemukan cara mereproduksi masalah ini tetapi tidak mendapatkan solusinya. github.com/magento/magento2/issues/17634
Manish Goswami