Qu'est-ce qui fait que Views ne trouve pas de manière cohérente mais intermittente une vue fournie par le module Advanced Forum?


15

Je reçois une erreur fréquente et intermittente du module Advanced Forum qui provoque une erreur 500 lorsqu'elle se produit (WSOD). En production, cela se produit environ 20 fois par heure, probablement sur 2 à 3% de toutes les charges de pages de forum par heure. Il est toujours intermittent . Localement, je ne peux pas reproduire systématiquement l'erreur, mais elle se produit.

L'erreur est sur

Ligne 232 de sites / all / modules / contrib / advanced_forum / includes / core-overrides.inc`:

Appel à la méthode non définie stdClass :: preview ()

Le problème réside dans la fonction 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 () ne parvient pas à trouver la vue et l'objet n'est pas créé comme prévu sur la ligne de retour. Le problème semble donc résider avec les vues qui ne savent pas parfois que la vue existe. Cela me fait penser que c'est un problème de crochet.

Là où ça commence à devenir étrange, ce sont les implémentations de hook_views_default_views () et hook_views_plugins (). Selon views.api.php, hook_views_default_views () devrait être dans un fichier appelé MODULENAME.views_default.inc et hook_views_plugins () devrait être dans un fichier appelé MODULENAME.views.inc. Cependant, les deux fichiers se trouvent dans le fichier MODULENAME.views.inc.

De views.api.php:

  • hook_views_plugins()
    Ce crochet doit être placé dans MODULENAME.views.inc et il sera automatiquement chargé.
    MODULENAME.views.inc doit se trouver dans le répertoire spécifié par la clé 'path' retournée par MODULENAME_views_api (), ou le même répertoire que le fichier .module, si 'path' n'est pas spécifié.

  • hook_views_default_views()
    Ce crochet doit être placé dans MODULENAME.views_default.inc et il sera automatiquement chargé. MODULENAME.views_default.inc doit se trouver dans le répertoire spécifié par la clé 'path' renvoyée par MODULENAME_views_api (), ou le même répertoire que le fichier .module, si 'path' n'est pas spécifié.

J'ai essayé de diviser ces routines en fichiers apparemment corrects. Cela a amené Views à rechercher systématiquement la vue Advanced Forum (comme indiqué qu'il apparaissait dans la liste GUI Views) mais ne voyait pas le plug-in. Les pages de Advanced Forum se sont bien déroulées, mais les vues étaient vides car elles faisaient référence à un plug-in de style fourni par Advanced Forum que Views ne voyait plus.

Je suppose que je manque quelque chose sur les crochets Views, mais je suis totalement perplexe.

  • Pile: Drupal 7, vues (7.x-3.3), CTools (7.x-1.0), forum avancé (7.x-2.0)
  • PHP FPM, APC, nginx, Redis
  • Je n'ai rien trouvé d'utile dans ce problème

MISE À JOUR 1 : Bien que je n'aie pas résolu la cause première, il semble que la désactivation de Redis et le retour au mécanisme de stockage par cache basé sur la base de données par défaut de Drupal empêchent le problème de se produire.

MISE À JOUR 2 : Je peux répliquer le problème de manière fiable sur local en faisant un flushalldans Redis. La première page chargée de regarder une liste de forum sera fatale. Le deuxième chargement de page (et tous les suivants) fonctionne correctement . MISE À JOUR: Je dois frapper la page de liste des vues d'administration pour effacer l'erreur.

MISE À JOUR 3 : Lors d'un dépannage plus poussé, le problème semble être dû au fait que le cache des vues n'est pas correctement reconstruit après un effacement du cache, uniquement lors de l'utilisation de Redis. Le problème ne se produit pas lors du retour au cache Drupal standard. Lorsque le problème se produit, seules 2 à 4 entrées de cache existent pour les vues, par opposition à 100+ lorsque le cache est correctement créé. La visite de la page de liste des vues d'administration entraîne la création complète du cache et le problème ne se produit pas. Je dois vérifier si le fait de frapper une page de vue Afficher à l'origine du problème, ou simplement la vue avancée du forum.

MISE À JOUR 4 : Un utilisateur utile sur IRC a suggéré que cela pourrait être un problème lié aux problèmes de condition de concurrence du cache de vues: 853864 , 1102252


Avez-vous essayé de créer un problème dans la file d'attente Views, Ctools ou Advanced Forum? Il me semble que la question est de savoir si Views ou Advanced Forum prend actuellement en charge redis? Pour autant que je sache, Views utilise un langage de requête relationnelle (SQL) pour construire ses affichages. Je ne sais pas dans quelle mesure cela fonctionnerait avec Redis (un magasin de valeurs-clés). Ce n'est pas vraiment une réponse, mais alors, personnellement, je ne sais pas s'il y a une réponse à cela. Je vous recommande également de contacter les canaux IRC drupaux pour cette question. Bonne chance.
barista amateur

Configuration intéressante que vous avez là-bas.
barista amateur

J'utilise uniquement Redis en remplacement du back-end du cache de Drupal, il devrait donc être transparent pour Views. J'ai posté sur Do without luck. drupal.org/node/1110688
Justin

@amateurbarista C'est Pantheon Drupal.
Justin

1
Êtes-vous en mesure d'essayer d'autres backends de cache? Cela pourrait potentiellement identifier si vous rencontrez un problème avec Views ou avec Redis.
mpdonadio

Réponses:


1

Il semble que vous ayez trouvé la bonne réponse de l'IRC. «Toujours intermittent» d'après mon expérience, il y a deux sources qui remplissent le cache. Le plus courant est lorsque vous avez un site de développement et un site de production / transfert sur différentes bases de code mais la même base de données. Les caches fournis par Drupal dont j'ai lu le code pour se connecter à la base de données, donc les informations de routage / fonction qui sont mises en cache vont contaminer. Le fait d'appuyer sur la page admin / modules actualisera le cache et les emplacements des modules, le fait d'appuyer sur la page de liste admin / views efface votre erreur car il actualise la compréhension des vues du site du point de vue de votre site au lieu de ce qui est en conflit avec vous.

Si vous avez la capacité d'administrateur de serveur, changez le mot de passe pour la base de données de votre site et le mot de passe dans votre settings.php, et voyez ce qui se casse. Vos listes devraient cesser d'être corrompues et ce qui les altère devrait se casser ... à moins qu'il ne soit directement connecté à votre site et à l'aide de votre fichier settings.php.

Vérifiez également qu'il n'y a pas plusieurs installations du module de vues dans votre docroot.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.