Co powoduje, że Widoki konsekwentnie, ale sporadycznie, nie znajdują widoku udostępnianego przez moduł Advanced Forum?

15

Otrzymuję częsty, przerywany błąd z modułu Advanced Forum, który powoduje błąd 500, gdy się pojawi (WSOD). Podczas produkcji dzieje się to około 20 razy na godzinę, prawdopodobnie około 2-3% wszystkich ładowań strony forum na godzinę. Jest konsekwentnie przerywany . Lokalnie nie mogę konsekwentnie odtworzyć błędu, ale się zdarza.

Błąd jest włączony

Wiersz 232 witryn / all / modules / contrib / advanced_forum / obejmuje / core-overrides.inc`:

Wywołanie niezdefiniowanej metody stdClass :: Preview ()

Problem leży w funkcji 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));

}

Zasadniczo views_get_view () nie może znaleźć widoku, a obiekt nie jest tworzony zgodnie z oczekiwaniami w linii powrotnej. Problem wydaje się więc polegać na tym, że Widoki czasami nie wiedzą, że widok istnieje. To sprawia, że ​​myślę, że to problem z hakiem.

Tam, gdzie zaczyna robić się nieparzyste, są implementacje hook_views_default_views () i hook_views_plugins (). Według views.api.php hook_views_default_views () powinien znajdować się w pliku o nazwie MODULENAME.views_default.inc, a hook_views_plugins () powinien znajdować się w pliku o nazwie MODULENAME.views.inc. Oba pliki znajdują się jednak w pliku MODULENAME.views.inc.

Od views.api.php:

  • hook_views_plugins()
    Ten hak powinien zostać umieszczony w MODULENAME.views.inc i zostanie automatycznie załadowany.
    MODULENAME.views.inc musi znajdować się w katalogu określonym przez klucz „path” zwrócony przez MODULENAME_views_api () lub w tym samym katalogu co plik .module, jeśli „path” nie jest określony.

  • hook_views_default_views()
    Ten hak powinien zostać umieszczony w pliku MODULENAME.views_default.inc i zostanie automatycznie załadowany. MODULENAME.views_default.inc musi znajdować się w katalogu określonym przez klucz „path” zwrócony przez MODULENAME_views_api () lub w tym samym katalogu co plik .module, jeśli „path” nie jest określony.

Próbowałem podzielić te procedury na pozornie poprawne pliki. Spowodowało to, że widoki konsekwentnie znajdowały widok Advanced Forum (jak wskazano, że pojawił się na liście GUI widoków), ale nie widział wtyczki. Strony na Forum zaawansowanym działały poprawnie, ale widoki były puste, ponieważ odwoływały się do wtyczki stylowej udostępnionej przez Forum zaawansowane, której widoki już nie widziały.

Zakładam, że coś mi brakuje w hakach Views, ale jestem kompletnie zakłopotany.

  • Stos: Drupal 7, widoki (7.x-3.3), CTools (7.x-1.0), zaawansowane forum (7.x-2.0)
  • PHP FPM, APC, nginx, Redis
  • Nie znalazłem nic pomocnego w tym problemie

AKTUALIZACJA 1 : Chociaż nie rozwiązałem głównej przyczyny, wygląda na to, że wyłączenie Redis i powrót do domyślnego mechanizmu przechowywania pamięci podręcznej opartego na bazie danych Drupala powstrzymuje problem.

AKTUALIZACJA 2 : Mogę niezawodnie zreplikować problem lokalnie, wykonując a flushallw Redis. Załadowanie pierwszej strony przeglądania listy forum zakończy się śmiercią. Ładowanie drugiej strony (i wszystkie kolejne) działa dobrze . AKTUALIZACJA: Muszę przejść na stronę z listą wyświetleń administratora, aby usunąć błąd.

AKTUALIZACJA 3 : Przy dalszym rozwiązywaniu problemu problem wydaje się być spowodowany nieprawidłowym przebudowaniem pamięci podręcznej Widoki po wyczyszczeniu pamięci podręcznej, tylko podczas korzystania z Redis. Problem nie występuje podczas powrotu do standardowej pamięci podręcznej Drupal. Gdy problem występuje, istnieją tylko 2-4 wpisy pamięci podręcznej dla widoków, w przeciwieństwie do 100+, gdy pamięć podręczna jest poprawnie zbudowana. Odwiedzenie strony listy widoków administratora powoduje, że pamięć podręczna jest w pełni zbudowana i problem nie występuje. Muszę sprawdzić, czy trafienie na jakąkolwiek stronę widoku Wyświetlenia powoduje problem, czy tylko na zaawansowany widok forum.

AKTUALIZACJA 4 : Pomocny użytkownik IRC zasugerował, że może to być problem związany z problemami z wyścigiem w pamięci podręcznej wyświetleń: 853864 , 1102252

Justin
źródło
Czy próbowałeś utworzyć problem w kolejce Widoki, Ctools lub Forum zaawansowane? Wydaje mi się, że pytanie brzmi: czy Widoki lub Zaawansowane Forum obecnie obsługują redis? O ile mi wiadomo, widoki używają relacyjnego języka zapytań (SQL) do konstruowania wyświetlaczy. Nie jestem pewien, jak dobrze by się to sprawdziło w Redis (sklepie z kluczowymi wartościami). To nie jest tak naprawdę odpowiedź, ale osobiście nie wiem, czy jest na to odpowiedź. Polecam również skontaktowanie się z kanałami IRC drupal dla tego pytania. Powodzenia.
amator barista
Ciekawa konfiguracja, którą tam masz.
amator barista
Używam Redis tylko jako drop-in zastępujący backend pamięci podręcznej Drupala, więc powinien być przezroczysty dla widoków. Napisałem „Do bez szczęścia”. drupal.org/node/1110688
Justin
@amateurbarista It's Pantheon Drupal.
Justin,
1
Czy możesz wypróbować inne zaplecze pamięci podręcznej? To może potencjalnie zidentyfikować, czy masz problem z Widokami czy z Redis.
mpdonadio

Odpowiedzi:

1

Wygląda na to, że znalazłeś właściwą odpowiedź z IRC. „Konsekwentnie przerywane” z mojego doświadczenia ma miejsce, gdy istnieją dwa źródła wypełniające pamięć podręczną. Najczęściej ma to miejsce, gdy masz witrynę programistyczną i witrynę pomostową / produkcyjną na różnych podstawach kodu, ale w tej samej bazie danych. Dostarczone przez drupala pamięci podręczne, które przeczytałem, aby połączyć się z bazą danych, więc informacje o routingu / funkcjach, które są buforowane, zostaną zanieczyszczone. Uderzenie w stronę administratora / modułów odświeży pamięć podręczną modułu i lokalizacje, uderzenie w stronę listy administratorów / widoków usunie twój błąd, ponieważ odświeża rozumienie poglądów witryny z perspektywy witryny zamiast z perspektywy tego, co jest w konflikcie z tobą.

Jeśli masz uprawnienia administratora serwera, zmień hasło do bazy danych witryny i hasło w pliku settings.php i zobacz, co się psuje. Twoje wpisy powinny przestać być uszkodzone, a to, co manipuluje przy nich, powinno się zepsuć ... chyba że jest bezpośrednio połączone z twoją witryną i używa pliku settings.php.

Sprawdź również, czy nie ma wielu instalacji modułu widoków w twoim docroot.

Tygodnie programistyczne
źródło