Was führt dazu, dass Views konsistent, aber zeitweise keine vom Advanced Forum-Modul bereitgestellte Ansicht finden?


15

Ich erhalte einen häufigen, zeitweise auftretenden Fehler vom Advanced Forum-Modul, der beim Auftreten einen 500-Fehler verursacht (WSOD). In der Produktion geschieht dies ungefähr 20 Mal pro Stunde, bei wahrscheinlich 2-3% aller Forum-Seitenladungen pro Stunde. Es ist durchweg intermittierend . Lokal kann ich den Fehler nicht konsistent reproduzieren, aber er tritt auf.

Der Fehler ist eingeschaltet

Zeile 232 von sites / all / modules / contrib / advanced_forum / includes / core-overrides.inc`:

Aufruf der undefinierten Methode stdClass :: preview ()

Das Problem liegt bei der Funktion 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));

}

Im Wesentlichen findet views_get_view () die Ansicht nicht und das Objekt wird nicht wie erwartet in der Rückgabezeile erstellt. Das Problem scheint also darin zu liegen, dass Views gelegentlich nicht wissen, dass die View existiert. Das lässt mich denken, dass es ein Hakenproblem ist.

Wo es merkwürdig wird, sind die Implementierungen von hook_views_default_views () und hook_views_plugins (). Gemäß views.api.php sollte sich hook_views_default_views () in einer Datei mit dem Namen MODULENAME.views_default.inc befinden, und hook_views_plugins () sollte sich in einer Datei mit dem Namen MODULENAME.views.inc befinden. Beide Dateien befinden sich jedoch in der Datei MODULENAME.views.inc.

Aus views.api.php:

  • hook_views_plugins()
    Dieser Hook sollte in MODULENAME.views.inc platziert werden und wird automatisch geladen.
    MODULENAME.views.inc muss sich in dem Verzeichnis befinden, das mit dem von MODULENAME_views_api () zurückgegebenen Schlüssel 'path' angegeben wurde, oder in demselben Verzeichnis wie die .module-Datei, wenn 'path' nicht angegeben ist.

  • hook_views_default_views()
    Dieser Hook sollte in MODULENAME.views_default.inc platziert werden und wird automatisch geladen. MODULENAME.views_default.inc muss sich in dem Verzeichnis befinden, das mit dem von MODULENAME_views_api () zurückgegebenen Schlüssel 'path' angegeben wurde, oder in demselben Verzeichnis wie die .module-Datei, wenn 'path' nicht angegeben ist.

Ich habe versucht, diese Routinen in die scheinbar richtigen Dateien aufzuteilen. Dies führte dazu, dass Views die Advanced Forum-Ansicht konsistent fand (wie angegeben, dass sie in der Views-GUI-Liste angezeigt wurde), das Plug-In jedoch nicht sah. Die Seiten im Erweiterten Forum liefen einwandfrei, aber die Ansichten waren leer, da sie auf ein vom Erweiterten Forum bereitgestelltes Stil-Plugin verweisen, das von Views nicht mehr angezeigt wurde.

Ich nehme an, ich vermisse etwas an Views Hooks, aber ich bin total ratlos.

  • Stack: Drupal 7, Views (7.x-3.3), CTools (7.x-1.0), Erweitertes Forum (7.x-2.0)
  • PHP FPM, APC, Nginx, Redis
  • Ich fand in dieser Ausgabe nichts hilfreiches

UPDATE 1 : Obwohl ich die Hauptursache nicht gelöst habe, scheint es, dass das Deaktivieren von Redis und das Zurücksetzen auf den datenbankbasierten Standard-Cache-Speichermechanismus von Drupal das Auftreten des Problems verhindert.

UPDATE 2 : Ich kann das Problem auf lokaler Ebene zuverlässig replizieren, indem ich ein flushallin Redis mache . Das Laden der ersten Seite beim Betrachten eines Foreneintrags ist fatal. Das Laden der zweiten Seite (und alle nachfolgenden) funktioniert einwandfrei . UPDATE: Ich muss die Seite mit den Admin-Ansichten aufrufen, um den Fehler zu beheben.

UPDATE 3 : Bei weiterer Fehlerbehebung scheint das Problem darauf zurückzuführen zu sein, dass der Views-Cache nach dem Löschen des Caches nur bei Verwendung von Redis nicht ordnungsgemäß wiederhergestellt wird. Das Problem tritt nicht auf, wenn Sie zum Standard-Drupal-Cache zurückkehren. Wenn das Problem auftritt, sind für Views nur 2-4 Cache-Einträge vorhanden, während für Views mehr als 100 vorhanden sind, wenn der Cache ordnungsgemäß erstellt wurde. Wenn Sie die Seite mit der Liste der Administratoransichten aufrufen, wird der Cache vollständig erstellt und das Problem tritt nicht auf. Ich muss überprüfen, ob eine View-View-Seite das Problem verursacht oder nur die erweiterte Forum-View.

UPDATE 4 : Ein hilfreicher Benutzer im IRC hat vorgeschlagen, dass dies ein Problem im Zusammenhang mit Problemen mit den Cache-Race-Bedingungen von Views sein könnte: 853864 , 1102252


Haben Sie versucht, ein Problem in der Warteschlange Ansichten, Ctools oder Erweitertes Forum zu erstellen? Mir scheint, die Frage ist, ob Views oder Advanced Forum derzeit Redis unterstützen. Soweit mir bekannt ist, verwendet Views eine relationale Abfragesprache (SQL), um die Anzeigen zu erstellen. Ich bin mir nicht sicher, wie gut das mit Redis (einem Key-Value-Store) ausgehen würde. Dies ist keine wirkliche Antwort, aber ich persönlich weiß nicht, ob es eine Antwort darauf gibt. Ich empfehle auch, dass Sie die Drupal-IRC-Kanäle für diese Frage erreichen. Viel Glück.
Amateur Barista

Interessantes Setup hast du da.
Amateur Barista

Ich verwende Redis nur als Ersatz für das Cache-Backend von Drupal, daher sollte es für Views transparent sein. Ich habe auf Do without luck gepostet. drupal.org/node/1110688
Justin

@amateurbarista Es ist Pantheon Drupal.
Justin

1
Sind Sie in der Lage, andere Cache-Backends auszuprobieren? Dies kann möglicherweise feststellen, ob Sie ein Problem mit Views oder mit Redis haben.
mpdonadio

Antworten:


1

Es hört sich so an, als hättest du die richtige Antwort vom IRC gefunden. Meiner Erfahrung nach ist "konsistent intermittierend", wenn zwei Quellen den Cache füllen. Am gebräuchlichsten ist es, wenn Sie eine Entwicklungssite und eine Bereitstellungs- / Produktionssite auf unterschiedlichen Codebasen, aber derselben Datenbank haben. Die von Drupal bereitgestellten Caches, die ich gelesen habe, um eine Verbindung zur Datenbank herzustellen, sodass zwischengespeicherte Routing- / Funktionsinformationen kontaminiert werden. Wenn Sie auf die Seite "admin / modules" klicken, werden der Modulcache und die Speicherorte aktualisiert. Wenn Sie auf die Seite "admin / views" klicken, wird der Fehler behoben, da die Website die Ansichten aus der Perspektive Ihrer Website und nicht aus der Perspektive der mit Ihnen in Konflikt stehenden Elemente aktualisiert.

Wenn Sie über die Fähigkeit zum Verwalten von Servern verfügen, ändern Sie das Kennwort für die Datenbank Ihrer Site und das Kennwort in Ihrer settings.php und überprüfen Sie, welche Fehler auftreten. Ihre Einträge sollten nicht mehr beschädigt werden und was daran manipuliert wird, sollte kaputt gehen ... es sei denn, es ist direkt mit Ihrer Site verbunden und verwendet Ihre settings.php-Datei.

Stellen Sie außerdem sicher, dass das Ansichtenmodul in Ihrem Dokumentverzeichnis nicht mehrfach installiert ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.