Я получаю частую, прерывистую ошибку от модуля Advanced Forum, которая вызывает ошибку 500 при ее возникновении (WSOD). На производстве это происходит примерно 20 раз в час, примерно на 2-3% всех загрузок страницы форума в час. Это постоянно прерывисто . Локально, я не могу последовательно воспроизвести ошибку, но это происходит.
Ошибка включена
Строка 232 сайтов / все / modules / contrib / advanced_forum / includes / 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 () не может найти представление, и объект не создается должным образом в обратной строке. Таким образом, проблема, похоже, связана с представлениями, иногда не зная, что представление существует. Это заставляет меня думать, что это проблема с крючком.
Где это начинает становиться странным, являются реализациями 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 должен находиться в каталоге, указанном ключом «путь», возвращаемом MODULENAME_views_api (), или в том же каталоге, что и файл .module, если «путь» не указан.hook_views_default_views()
Этот хук должен быть помещен в MODULENAME.views_default.inc, и он будет загружен автоматически. MODULENAME.views_default.inc должен находиться в каталоге, указанном ключом «путь», возвращаемом MODULENAME_views_api (), или в том же каталоге, что и файл .module, если «путь» не указан.
Я попытался разделить эти процедуры на правильные, казалось бы, файлы. Это привело к тому, что Views последовательно находил представление Advanced Forum (как указано, что оно появилось в списке GUI Views), но не видело плагин. Страницы в Advanced Forum работали нормально, но представления были пустыми, потому что они ссылались на плагин стиля, предоставленный Advanced Forum, который Views больше не видел.
Я предполагаю, что что-то упускаю из-за хуков Views, но я совершенно в тупике
- Стек: Drupal 7, Views (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 записи в кэш, в отличие от 100+, когда кэш построен правильно. Посещение страницы списка представлений администратора приводит к тому, что кэш полностью создается, и проблема не возникает. Мне нужно проверить, если вы нажмете какую-либо страницу просмотра View, вызывающую проблему, или просто расширенный просмотр форума.
ОБНОВЛЕНИЕ 4 : Полезный пользователь на IRC предположил, что это может быть проблемой, связанной с проблемами состояния гонки кэша Представлений: 853864 , 1102252