drupal 7 – ¿Qué está provocando que las Vistas no encuentren de forma constante pero intermitente una vista proporcionada por el módulo Foro avanzado?

Pregunta:

Recibo un error frecuente e intermitente del módulo del Foro avanzado que causa un error 500 cuando ocurre (WSOD). En producción, ocurre unas 20 veces por hora, probablemente en el 2-3% de todas las cargas de páginas del foro por hora. Es constantemente intermitente . Localmente, no puedo reproducir el error de manera consistente, pero ocurre.

El error esta en

Línea 232 de sites / all / modules / 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));

}

Básicamente, views_get_view () no encuentra la vista y el objeto no se crea como se esperaba en la línea de retorno. Por tanto, el problema parece residir en que Views, en ocasiones, no sabe que existe. Esto me hace pensar que es un problema de gancho.

Donde comienza a volverse extraño son las implementaciones de hook_views_default_views () y hook_views_plugins (). De acuerdo con views.api.php hook_views_default_views () debería estar en un archivo llamado MODULENAME.views_default.inc y hook_views_plugins () debería 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 no se especifica 'ruta'.

  • 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 no se especifica 'ruta'.

Intenté dividir estas rutinas en archivos aparentemente correctos. Esto hizo que Views encontrara constantemente la vista de Foro avanzado (como se indicó que aparecía en la lista de la GUI de Views) pero no veía el complemento. Las páginas de 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 Views, 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 evita que ocurra el problema.

ACTUALIZACIÓN 2 : Puedo replicar de manera confiable el problema en local haciendo un flushall en Redis. La carga de la primera página de mirar una lista de foros será fatal. La carga de la segunda 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, el problema parece deberse a que la caché de Vistas no se reconstruyó correctamente después de borrar la caché, solo cuando se usa Redis. El problema no ocurre al volver a la caché Drupal estándar. Cuando ocurre el problema, solo existen 2-4 entradas de caché para Vistas, en lugar de más de 100 cuando la caché está construida correctamente. Visitar la página de lista de vistas de administrador hace que la memoria caché esté completamente construida y el problema no ocurre. Necesito verificar si presionar alguna página de vista de vista está causando el problema, o solo la vista de foro avanzada.

ACTUALIZACIÓN 4 : Un usuario útil en IRC ha sugerido que esto podría ser un problema relacionado con problemas de condición de carrera de la caché de Vistas: 853864 , 1102252

Respuesta:

Parece que encontró la respuesta correcta en el IRC. "Consistentemente intermitente" en mi experiencia es cuando hay dos fuentes que llenan la caché. Lo más común es cuando tiene un sitio de desarrollo y un sitio de ensayo / producción en diferentes bases de código pero en la misma base de datos. Los cachés proporcionados por drupal que he leído código para conectarse a la base de datos, por lo que la información de enrutamiento / función que se almacena en caché se contaminará. Al presionar la página de administración / módulos se actualizarán la memoria caché y las ubicaciones del módulo, al presionar la página de lista de administración / vistas se borra el 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 esté en conflicto con usted.

Si tiene la capacidad de administrador del servidor, cambie la contraseña de 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 corruptos 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, asegúrese de que no haya varias instalaciones del módulo de vistas en su documento.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım