ฉันได้รับข้อผิดพลาดบ่อยครั้งเป็นระยะ ๆ จากโมดูลฟอรัมขั้นสูงที่ทำให้เกิดข้อผิดพลาด 500 เมื่อมันเกิดขึ้น (WSOD) เกี่ยวกับการผลิตมันเกิดขึ้นประมาณ 20 ครั้งต่อชั่วโมงหรือประมาณ 2-3% ของหน้าเว็บบอร์ดทั้งหมดโหลดต่อชั่วโมง มันเป็นระยะ ๆ อย่างต่อเนื่อง ในพื้นที่ฉันไม่สามารถทำซ้ำข้อผิดพลาดได้อย่างสม่ำเสมอ แต่เกิดขึ้น
ข้อผิดพลาดเปิดอยู่
บรรทัดที่ 232 ของไซต์ / ทั้งหมด / modules / contrib / advanced_forum / include / core-overrides.inc`:
การเรียกไปยังวิธีที่ไม่ได้กำหนด stdClass :: preview ()
ปัญหาอยู่กับฟังก์ชั่น advanced_forum_get_topics ():
function advanced_forum_get_topics($tid, $sortby, $forum_per_page, $sort_form = TRUE) {
$term = taxonomy_term_load($tid);
drupal_add_feed('taxonomy/term/' . $tid . '/feed', 'RSS - ' . check_plain($term->name));
// Views handles this page
$view = views_get_view('advanced_forum_topic_list');
$view->sort_form = $sort_form;
return $view->preview('default', array($tid));
}
โดยพื้นฐาน views_get_view () ล้มเหลวในการค้นหามุมมองและวัตถุไม่ถูกสร้างขึ้นตามที่คาดไว้ในบรรทัดที่ส่งคืน ดังนั้นปัญหาดูเหมือนจะโกหกกับ Views บางครั้งไม่ทราบว่ามุมมองที่มีอยู่ นี่ทำให้ฉันคิดว่ามันเป็นปัญหาเบ็ด
จุดเริ่มต้นที่แปลกคือการนำไปใช้งานของ hook_views_default_views () และ hook_views_plugins () ตาม views.api.php hook_views_default_views () ควรอยู่ในไฟล์ชื่อ MODULENAME.views_default.inc และ hook_views_plugins () ควรอยู่ในไฟล์ชื่อ MODULENAME.views.inc อย่างไรก็ตามทั้งสองไฟล์อยู่ในไฟล์ MODULENAME.views.inc
จาก views.api.php:
hook_views_plugins()
ตะขอนี้ควรอยู่ใน MODULENAME.views.inc และจะโหลดอัตโนมัติ
MODULENAME.views.inc จะต้องอยู่ในไดเรกทอรีที่ระบุโดยคีย์ 'path' ที่ส่งคืนโดย MODULENAME_views_api () หรือไดเรกทอรีเดียวกันกับไฟล์. modod ถ้าหากไม่ได้ระบุพา ธhook_views_default_views()
ตะขอนี้ควรอยู่ใน MODULENAME.views_default.inc และจะถูกโหลดอัตโนมัติ MODULENAME.views_default.inc จะต้องอยู่ในไดเรกทอรีที่ระบุโดยคีย์ 'path' ที่ส่งคืนโดย MODULENAME_views_api () หรือไดเรกทอรีเดียวกันกับไฟล์. โมดูลถ้า 'path' ไม่ได้ระบุไว้
ฉันพยายามแบ่งขั้นตอนเหล่านี้เป็นไฟล์ที่ดูเหมือนจะถูกต้อง สิ่งนี้ทำให้ Views สามารถค้นหามุมมองฟอรัมขั้นสูง (ตามที่ระบุว่าปรากฏในรายการ Views GUI) แต่ไม่เห็นปลั๊กอิน หน้าในฟอรัมขั้นสูงทำงานได้ดี แต่มุมมองนั้นว่างเปล่าเพราะอ้างถึงปลั๊กอินสไตล์ที่จัดทำโดยฟอรัมขั้นสูงที่วิวไม่เห็นอีก
ฉันคิดว่าฉันพลาดบางสิ่งเกี่ยวกับ Views hooks แต่ฉันก็นิ่งงันโดยสิ้นเชิง
- สแต็ค: Drupal 7, มุมมอง (7.x-3.3), CTools (7.x-1.0), ฟอรัมขั้นสูง (7.x-2.0)
- PHP FPM, APC, nginx, Redis
- ฉันไม่พบสิ่งที่เป็นประโยชน์ในการแก้ไขปัญหานี้
อัปเดต 1 : ในขณะที่ฉันยังไม่ได้แก้ไขสาเหตุที่แท้จริง แต่ก็ปรากฏว่าปิดใช้งาน Redis และย้อนกลับสู่กลไกการจัดเก็บแคชตามฐานข้อมูลเริ่มต้นของ Drupal หยุดปัญหาไม่ให้เกิดขึ้น
อัปเดต 2 : ฉันสามารถทำซ้ำปัญหาในท้องถิ่นได้อย่างน่าเชื่อถือโดยการทำflushall
ใน Redis การโหลดหน้าแรกของการดูรายการฟอรัมจะทำให้เสียชีวิต โหลดหน้าสอง (และต่อมาทั้งหมด) ทำงานได้ดี อัปเดต: ฉันต้องกดหน้ารายชื่อผู้ดูแลระบบเพื่อดูข้อผิดพลาด
อัปเดต 3 : ในการแก้ไขปัญหาเพิ่มเติมดูเหมือนว่าจะเกิดจากแคชมุมมองไม่ถูกสร้างขึ้นมาใหม่หลังจากล้างแคชเฉพาะเมื่อใช้ Redis เท่านั้น ปัญหาไม่เกิดขึ้นเมื่อย้อนกลับสู่แคช Drupal มาตรฐาน เมื่อปัญหาเกิดขึ้นมีรายการแคชเพียง 2-4 รายการสำหรับ Views ซึ่งต่างจาก 100+ เมื่อสร้างแคชอย่างเหมาะสม การเยี่ยมชมหน้ารายการมุมมองผู้ดูแลระบบทำให้แคชถูกสร้างขึ้นอย่างสมบูรณ์และปัญหาจะไม่เกิดขึ้น ฉันต้องตรวจสอบว่าการกดปุ่มมุมมองการดูใด ๆ ทำให้เกิดปัญหาหรือเพียงแค่ดูฟอรัมขั้นสูง
อัปเดต 4 : ผู้ใช้ที่มีประโยชน์ใน IRC แนะนำว่านี่อาจเป็นปัญหาที่เกี่ยวข้องกับปัญหาการแข่งขันแคชของมุมมอง: 853864 , 1102252