Magento 2.2.x แคชถูกปิดใช้งานโดยอัตโนมัติ


16

ก่อนอื่นฉันไม่สามารถหาข้อมูลเกี่ยวกับปัญหาประเภทนี้ได้ทุกที่บนเว็บ

เรามีสภาพแวดล้อมการผลิตที่มีการรวมคอมไพล์ เราดึงการเปลี่ยนแปลงของเราไปทาง git ( git pull ) เท่านั้น

ปัญหาคือว่าอย่างใดในหนึ่งในขั้นตอนวีโอไอพีแคชพิการโดยอัตโนมัติ (ศูนย์ทั้งหมดเมื่อตรวจสอบแคช: สถานะ) ที่ทำให้เกิดปัญหาหากพลาดผ่านโปรแกรมเมอร์เพิ่มเติมทำให้เซิร์ฟเวอร์เกินเนื่องจากการรับส่งข้อมูลสูง 'ทุบตี' Magento โดยไม่ต้องแคช

บางทีบางคนเคยเห็นปัญหานี้มาก่อนหรือไม่ เราไม่รู้ว่าเกิดขึ้นเมื่อใดหรืออย่างไร
และมันจะปรากฏขึ้นแบบสุ่ม

ขั้นตอนปกติเราทำ:

  • เปิดใช้งานการบำรุงรักษา
  • git pull
  • ผู้แต่งติดตั้ง (ถ้าจำเป็น)
  • โมดูลเปิดใช้งาน Vendor_ModuleName (หากจำเป็น)
  • การตั้งค่า: อัพเกรด (ถ้าจำเป็น)
  • การล้างสิ่งคงที่
  • คำสั่งการปรับใช้
  • การล้างแคช
  • การล้าง opcache
  • ปิดใช้งานการบำรุงรักษา

ฉันขอขอบคุณข้อเสนอแนะที่มีค่าซึ่งสามารถช่วยแก้ปัญหาประเภทนี้ได้


หากคุณทำเช่นsetup:upgradeนั้นแคชจะปิดการใช้งานโดยอัตโนมัติ
u

@AmitBera ฉันต้องไม่เห็นด้วยกับคุณแม้ว่าฉันจะขัดจังหวะการเดินทางนี้มันจะไม่เปลี่ยนแคช
Macas

ตกลง. ฉันจะทำการทดสอบ .... ดูตรวจสอบ screnerio
Amit Bera

คำตอบ:


16

ดูเหมือนว่าเป็นปัญหาที่ทราบแล้ว :
เกิดขึ้นเป็นครั้งคราวในโครงการที่ฉันกำลังดำเนินการอยู่ แต่ฉันไม่สามารถหาขั้นตอนในการทำซ้ำได้ ทั้งหมดที่ฉันพูดได้คือมันเกิดขึ้นระหว่างกระบวนการปรับใช้
สิ่งที่ฉันพบคือภายใต้สถานการณ์บางอย่างไฟล์.regenerateถูกเขียนในvarโฟลเดอร์ (ไม่ว่าจะเป็นตอนอัพเกรดติดตั้งหรือติดตั้ง / อัพเกรดผู้แต่ง) และถ้าไฟล์นั้นมีอยู่เมื่อเรียกใช้setup:di:compileแคชถูกปิดใช้งานและเปิดใช้งานอีกครั้งเมื่อกระบวนการรวบรวมข้อมูลเสร็จสิ้น
ด้วยเหตุผลบางอย่างบางครั้งแคชไม่ได้เปิดใช้งานอีกครั้ง
เราใช้วิธีที่รวดเร็วและสกปรกและทำขั้นตอนสุดท้ายของกระบวนการปรับใช้php bin/magento cache:enableเพื่อให้แน่ใจ โดยพื้นฐานแล้วเราซ่อนสิ่งสกปรกใต้พรม

คุณสามารถค้นหารหัสที่ปิดการใช้งานแคชที่นี่
มันถูกห่อในTODO: removeคำสั่ง


1
สามารถยืนยัน ซ่อนมันไว้ใต้พรมเมื่อมันเกิดขึ้น
Philipp Sander

ตกลงดูเหมือนว่าฉันไม่ใช่คนเดียวที่มีสิ่งนี้ เรามักจะได้รับสิ่งนี้เมื่อเกิดข้อผิดพลาดและกระบวนการปรับใช้ล้มเหลว โดยการดูข้อมูลของคุณจะเป็นกรณีนี้ ขอบคุณสำหรับข้อมูลทำเครื่องหมายสิ่งนี้เป็นคำตอบ
Macas

ไม่มีใครได้รับการแก้ไขหรือไม่
Manish Goswami

5

สำหรับผู้ที่สนใจฉันคิดว่าฉันสามารถนำความรู้บางอย่างเกี่ยวกับเรื่องนี้มาใช้ มันดูเหมือนว่าจะเป็นปัญหาการทำงานพร้อมกัน (แย่ง) ใน \ วีโอไอพี \ Framework \ รหัส \ GeneratedFiles :: cleanGeneratedFiles เมื่อ var / ธง .regenerate มีการตั้งค่าและมากกว่าหนึ่งพยายามกระบวนการ / การร้องขอในการทำความสะอาดไฟล์ที่สร้างขึ้น

มีแนวโน้มที่จะเกิดขึ้นเมื่อคุณเปิดใช้งาน cron และกลุ่ม cron จำนวนมากที่ใช้การกำหนดค่า use_separate_process เมื่อมีมากกว่าหนึ่งกระบวนการพยายามที่จะทำความสะอาดเดียวกัน FileIterator ล้มเหลวด้วยข้อความต่าง ๆ ที่คล้ายกับ: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.

การย้ายสายไปยัง$this->write->delete(self::REGENERATE_FLAG);หลังจากการตรวจสอบการตั้งค่าสถานะแก้ไขปัญหาได้เนื่องจากกระบวนการที่มาถึงครั้งแรกทำเครื่องหมายตัวเองว่ารับผิดชอบการล้างไฟล์

ฉันปล่อยให้วิดีโอสาธิตเกี่ยวกับวิธีการจำลองปัญหาที่นี่ : https://youtu.be/9-X1cIIY7y8

และสคริปต์ที่ใช้มัน

#!/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"

คุณพบทางออกหรือไม่
Manish Goswami

ฉันพบวิธีทำให้เกิดปัญหานี้อีกครั้ง แต่ไม่ใช่วิธีแก้ปัญหาที่ได้รับ github.com/magento/magento2/issues/17634
Manish Goswami
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.