อะไรคือสาเหตุที่ทำให้ Views เข้าชมอย่างสม่ำเสมอ แต่ไม่พบมุมมองที่จัดทำโดยโมดูลฟอรัมขั้นสูง


15

ฉันได้รับข้อผิดพลาดบ่อยครั้งเป็นระยะ ๆ จากโมดูลฟอรัมขั้นสูงที่ทำให้เกิดข้อผิดพลาด 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


คุณลองสร้างปัญหาในคิว Views, Ctools หรือฟอรัมขั้นสูงหรือไม่ ดูเหมือนว่าฉันจะมีคำถามอยู่แล้วว่า Views หรือ Advanced Forum รองรับ redis หรือไม่? เท่าที่ฉันทราบ Views จะใช้ภาษาคิวรีเชิงสัมพันธ์ (SQL) เพื่อสร้างจอแสดงผล ฉันไม่แน่ใจว่าจะเล่นกับ Redis ได้ดีเพียงใด (ที่เก็บคีย์ - ค่า) นี่ไม่ใช่คำตอบจริงๆ แต่แล้วโดยส่วนตัวแล้วฉันไม่รู้ว่ามีคำตอบไหม ฉันยังแนะนำให้คุณเข้าถึง drupal IRC สำหรับคำถามนี้ โชคดี.
บาริสต้ามือสมัครเล่น

การตั้งค่าที่น่าสนใจที่คุณมี
บาริสต้ามือสมัครเล่น

ฉันใช้ Redis เป็นเพียงการแทนที่สำหรับแบ็กเอนด์แคชของ Drupal ดังนั้นควรโปร่งใสกับ Views ฉันโพสต์ที่ต้องทำโดยไม่มีโชค drupal.org/node/1110688
จัสติน

@amateurbarista It's Pantheon Drupal
Justin

1
คุณอยู่ในฐานะที่จะลองแบ็กเอนด์แคชอื่น ๆ หรือไม่? ซึ่งอาจระบุได้ว่าคุณกำลังมีปัญหากับ Views หรือ Redis
mpdonadio

คำตอบ:


1

ดูเหมือนว่าคุณจะพบคำตอบที่ถูกต้องจาก IRC "ไม่สม่ำเสมอ" ในประสบการณ์ของฉันคือเมื่อมีสองแหล่งที่มากรอกแคช ที่พบบ่อยที่สุดคือเมื่อคุณมีไซต์การพัฒนาและไซต์การแสดง / การผลิตบนฐานรหัสที่แตกต่างกัน แต่ฐานข้อมูลเดียวกัน แคชที่ drupal จัดเตรียมไว้ให้ฉันได้อ่านรหัสสำหรับเชื่อมต่อกับฐานข้อมูลดังนั้นข้อมูลการเราต์ / ฟังก์ชั่นที่แคชจะข้ามสิ่งปนเปื้อน การกดปุ่มหน้าผู้ดูแลระบบ / โมดูลจะรีเฟรชแคชโมดูลและตำแหน่งการกดปุ่มหน้ารายการผู้ดูแลระบบ / มุมมองจะล้างข้อผิดพลาดของคุณเนื่องจากจะทำให้ไซต์เข้าใจมุมมองจากมุมมองของไซต์แทนมุมมองของสิ่งที่ขัดแย้งกับคุณ

หากคุณมีความสามารถในการดูแลเซิร์ฟเวอร์ให้เปลี่ยนรหัสผ่านเป็นฐานข้อมูลของเว็บไซต์และรหัสผ่านใน settings.php ของคุณและดูว่าตัวแบ่งใดบ้าง รายชื่อของคุณควรหยุดเสียหายและสิ่งที่จะแก้ไขไม่ได้ ... เว้นแต่จะเชื่อมต่อกับเว็บไซต์ของคุณโดยตรงและใช้ไฟล์ settings.php ของคุณ

ตรวจสอบเพื่อให้แน่ใจว่าไม่มีการติดตั้งโมดูลมุมมองหลายรายการใน docroot ของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.