Я отримую часту, переривчасту помилку від модуля Advanced Forum, яка викликає помилку 500, коли вона виникає (WSOD). На виробництві це відбувається приблизно 20 разів на годину, напевно, 2-3% усіх завантажень сторінки форуму на годину. Він послідовно переривчастий . Місцево я не можу послідовно відтворювати помилку, але вона трапляється.
Помилка ввімкнена
Рядок 232 сайтів / всі / модулі / contrib / Advanced_forum / включає / 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));
}
По суті, view_get_view () не вдається знайти подання, і об'єкт не створюється так, як очікувалося у зворотному рядку. Тож проблема, здається, полягає в поглядах, які іноді не знають, що існує погляд. Це змушує мене думати, що це проблема з гачками.
Там, де починає дивно, - це реалізоване файлів_установок_установок_установок_команд () і гачок-перегляду_plugins (). Відповідно до views.api.php how_views_default_views () має міститись у файлі під назвою MODULENAME.views_default.inc, а mower_views_plugins () має бути у файлі під назвою MODULENAME.views.inc. Однак обидва файли знаходяться у файлі MODULENAME.views.inc.
Від views.api.php:
hook_views_plugins()
Цей гачок слід розмістити в MODULENAME.views.inc, і він буде завантажений автоматично.
MODULENAME.views.inc має бути в каталозі, визначеному ключем 'path', поверненим MODULENAME_views_api (), або тим же каталогом, що і файл .module, якщо "path" не визначено.hook_views_default_views()
Цей гачок повинен бути розміщений у MODULENAME.views_default.inc, і він буде завантажений автоматично. MODULENAME.views_default.inc має бути в каталозі, визначеному клавішею "path", повернутою MODULENAME_views_api (), або тим же каталогом, що і файл .module, якщо "path" не визначено.
Я спробував розділити ці підпрограми на, здавалося б, правильні файли. Це призвело до того, що Перегляди постійно знаходили перегляд «Розширений форум» (як зазначено, що він відображався у списку графічного інтерфейсу «Перегляди»), але не бачили плагін. Сторінки в розширеному форумі спрацювали нормально, але перегляди були порожніми, оскільки вони посилалися на плагін стилю, наданий Advanced Forum, про те, що перегляди більше не бачили.
Я припускаю, що мені щось не вистачає про гачки Views, але я абсолютно спотиканий.
- Стек: 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 : При подальшому усуненні неполадок проблема, як видається, викликана тим, що кеш Views не буде належним чином відновлюватися після очищення кеша, лише при використанні Redis. Проблема не виникає при поверненні до стандартного кешу Drupal. Коли проблема виникає лише 2-4 записи кеша для Views, на відміну від 100+, коли кеш правильно побудований. Відвідування сторінки списку переглядів адміністратора призводить до того, що кеш буде повністю побудований, а проблема не виникає. Мені потрібно перевірити, чи потрапляє будь-яка сторінка перегляду View, що викликає проблему, або просто розширений перегляд форуму.
ОНОВЛЕННЯ 4 : Корисний користувач IRC припустив, що це може бути проблемою, пов’язаною з умовами перегонів із кешею переглядів : 853864 , 1102252