Recibo un error frecuente e intermitente del módulo Advanced Forum que causa un error 500 cuando ocurre (WSOD). En producción, ocurre aproximadamente 20 veces por hora, probablemente en un 2-3% de todas las cargas de páginas del foro por hora. Es consistentemente intermitente . Localmente, no puedo reproducir constantemente el error, pero ocurre.
El error esta encendido
Línea 232 de sitios / todos / módulos / contrib / advanced_forum / includes / core-overrides.inc`:
Llamada al método indefinido stdClass :: preview ()
El problema radica en la función 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));
}
Esencialmente, views_get_view () no puede encontrar la vista y el objeto no se crea como se esperaba en la línea de retorno. Por lo tanto, el problema parece estar en las Vistas que ocasionalmente no saben que existe. Esto me hace pensar que es un problema de gancho.
Donde comienza a ponerse extraño son las implementaciones de hook_views_default_views () y hook_views_plugins (). De acuerdo con views.api.php, hook_views_default_views () debe estar en un archivo llamado MODULENAME.views_default.inc y hook_views_plugins () debe estar en un archivo llamado MODULENAME.views.inc. Sin embargo, ambos archivos están en el archivo MODULENAME.views.inc.
Desde views.api.php:
hook_views_plugins()
Este gancho debe colocarse en MODULENAME.views.inc y se cargará automáticamente.
MODULENAME.views.inc debe estar en el directorio especificado por la clave 'ruta' devuelta por MODULENAME_views_api (), o el mismo directorio que el archivo .module, si 'ruta' no está especificada.hook_views_default_views()
Este gancho debe colocarse en MODULENAME.views_default.inc y se cargará automáticamente. MODULENAME.views_default.inc debe estar en el directorio especificado por la clave 'ruta' devuelta por MODULENAME_views_api (), o el mismo directorio que el archivo .module, si 'ruta' no está especificada.
Traté de dividir estas rutinas en los archivos aparentemente correctos. Esto provocó que las Vistas encontraran constantemente la vista del Foro avanzado (como se indicó que apareció en la lista de la GUI de Vistas) pero no vieron el complemento. Las páginas en Advanced Forum funcionaron bien, pero las vistas estaban en blanco porque hacían referencia a un complemento de estilo proporcionado por Advanced Forum que Views ya no veía.
Supongo que me falta algo sobre los ganchos de Vistas, pero estoy totalmente perplejo.
- Pila: Drupal 7, Vistas (7.x-3.3), CTools (7.x-1.0), Foro avanzado (7.x-2.0)
- PHP FPM, APC, nginx, Redis
- No encontré nada útil en este problema
ACTUALIZACIÓN 1 : Si bien no he resuelto la causa raíz, parece que deshabilitar Redis y volver al mecanismo de almacenamiento de caché basado en la base de datos predeterminado de Drupal detiene el problema.
ACTUALIZACIÓN 2 : puedo replicar de manera confiable el problema en local haciendo un flushall
en Redis. La primera carga de la página de mirar un listado del foro será fatal. La segunda carga de la página (y todas las posteriores) funcionan bien . ACTUALIZACIÓN: Tengo que presionar la página de listado de Vistas de administrador para borrar el error.
ACTUALIZACIÓN 3 : en la resolución de problemas adicionales, el problema parece ser causado por el caché de Vistas que no se reconstruye correctamente después de borrar un caché, solo cuando se usa Redis. El problema no ocurre cuando se vuelve al caché estándar de Drupal. Cuando se produce el problema, solo existen 2-4 entradas de caché para Vistas, a diferencia de más de 100 cuando el caché se construye correctamente. Visitar la página de la lista de vistas del administrador hace que el caché esté completamente construido y el problema no ocurre. Necesito verificar si golpear cualquier página de vista de Vista que causa el problema, o solo la vista avanzada del foro.
ACTUALIZACIÓN 4 : Un usuario útil en IRC ha sugerido que esto podría ser un problema relacionado con los problemas de las condiciones de carrera de caché de Vistas: 853864 , 1102252
Respuestas:
Parece que encontraste la respuesta correcta del IRC. "Constantemente intermitente" en mi experiencia es cuando hay dos fuentes que llenan el caché. Lo más común es cuando tiene un sitio de desarrollo y un sitio de preparación / producción en diferentes bases de código pero en la misma base de datos. Los cachés proporcionados por drupal para los que he leído el código para conectarse a la base de datos, por lo que la información de enrutamiento / función que se almacena en caché contaminará de forma cruzada. Al presionar la página admin / modules se actualizará la memoria caché del módulo y las ubicaciones, al presionar la página de listado admin / views borra su error porque actualiza la comprensión del sitio de las vistas desde la perspectiva de su sitio en lugar de la perspectiva de lo que sea que esté en conflicto con usted.
Si tiene capacidad de administrador del servidor, cambie la contraseña a la base de datos de su sitio y la contraseña en su settings.php, y vea qué se rompe. Sus listados deberían dejar de estar dañados y lo que los esté manipulando debería romperse ... a menos que esté directamente conectado a su sitio y usando su archivo settings.php.
Además, verifique que no haya varias instalaciones del módulo de vistas en su docroot.
fuente