Che cosa sta facendo sì che Views non trovi in ​​modo coerente ma intermittente una vista fornita dal modulo Advanced Forum?


15

Ricevo un errore frequente e intermittente dal modulo Advanced Forum che provoca un errore 500 quando si verifica (WSOD). Durante la produzione, accade circa 20 volte all'ora, probabilmente il 2-3% di tutti i caricamenti di pagine del forum all'ora. È costantemente intermittente . A livello locale, non riesco a riprodurre in modo coerente l'errore, ma si verifica.

L'errore è acceso

Riga 232 di siti / all / modules / contrib / advanced_forum / Includes / core-overrides.inc`:

Chiamata al metodo indefinito stdClass :: preview ()

Il problema si trova con la funzione 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));

}

Essenzialmente views_get_view () non riesce a trovare la vista e l'oggetto non viene creato come previsto sulla linea di ritorno. Quindi il problema sembra risiedere in Views occasionalmente non sapendo che esiste la view. Questo mi fa pensare che sia un problema con l'amo.

Dove iniziano a diventare strani sono le implementazioni di hook_views_default_views () e hook_views_plugins (). Secondo views.api.php hook_views_default_views () dovrebbe essere in un file chiamato MODULENAME.views_default.inc e hook_views_plugins () dovrebbe essere in un file chiamato MODULENAME.views.inc. Tuttavia, entrambi i file si trovano nel file MODULENAME.views.inc.

Da views.api.php:

  • hook_views_plugins()
    Questo hook deve essere posizionato in MODULENAME.views.inc e verrà caricato automaticamente.
    MODULENAME.views.inc deve trovarsi nella directory specificata dalla chiave 'path' restituita da MODULENAME_views_api () o nella stessa directory del file .module, se 'path' non è specificato.

  • hook_views_default_views()
    Questo hook deve essere posizionato in MODULENAME.views_default.inc e verrà caricato automaticamente. MODULENAME.views_default.inc deve trovarsi nella directory specificata dalla chiave 'path' restituita da MODULENAME_views_api () o nella stessa directory del file .module, se 'path' non è specificato.

Ho provato a suddividere queste routine in file apparentemente corretti. Ciò ha fatto sì che Views trovasse costantemente la vista Advanced Forum (come indicato che appariva nell'elenco GUI di Views) ma non vedeva il plug-in. Le pagine del forum avanzato funzionavano bene, ma le visualizzazioni erano vuote perché facevano riferimento a un plug-in di stile fornito dal forum avanzato che Views non vedeva più.

Presumo che mi manchi qualcosa sugli hook di Views, ma sono totalmente sconcertato.

  • Stack: Drupal 7, Visualizzazioni (7.x-3.3), CTools (7.x-1.0), Advanced Forum (7.x-2.0)
  • PHP FPM, APC, nginx, Redis
  • Non ho trovato nulla di utile in questo problema

AGGIORNAMENTO 1 : Anche se non ho risolto la causa principale, sembra che la disabilitazione di Redis e il ripristino del meccanismo di archiviazione cache basato su database predefinito di Drupal impediscano il verificarsi del problema.

AGGIORNAMENTO 2 : Posso replicare in modo affidabile il problema su local facendo un flushallin Redis. Il caricamento della prima pagina di visualizzazione di un elenco di forum sarà fatale. Il caricamento della seconda pagina (e tutti i successivi) funzionano correttamente . AGGIORNAMENTO: Devo toccare la pagina di elenco Visualizzazioni amministratore per cancellare l'errore.

AGGIORNAMENTO 3 : a seguito di un'ulteriore risoluzione del problema, il problema sembra essere causato dalla cache di Views non correttamente ricostruita dopo la cancellazione della cache, solo quando si utilizza Redis. Il problema non si verifica quando si ripristina la cache Drupal standard. Quando si verifica il problema, esistono solo 2-4 voci della cache per Views, al contrario di 100+ quando la cache è costruita correttamente. Visitando la pagina dell'elenco delle visualizzazioni dell'amministratore, la cache viene completamente compilata e il problema non si verifica. Devo verificare se colpire qualsiasi pagina della vista Visualizza che causa il problema o solo la vista avanzata del forum.

AGGIORNAMENTO 4 : Un utente utile su IRC ha suggerito che questo potrebbe essere un problema relativo ai problemi relativi alle condizioni della corsa della cache di Views: 853864 , 1102252


Hai provato a creare un problema nella coda Views, Ctools o Advanced Forum? Mi sembra che la domanda a portata di mano sia attualmente Views o Advanced Forum che supporta Redis? Per quanto ne so, Views utilizza un linguaggio di query relazionale (SQL) per costruire i suoi display. Non sono sicuro di come andrebbe bene con Redis (un archivio di valori-chiave). Questa non è davvero una risposta, ma poi, personalmente, non so se c'è una risposta. Consiglio anche di contattare i canali IRC drupal per questa domanda. In bocca al lupo.
barista dilettante,

Configurazione interessante che hai lì.
barista dilettante,

Sto usando Redis solo come sostituto drop-in per il backend della cache di Drupal, quindi dovrebbe essere trasparente per Views. Ho pubblicato su Do senza fortuna. drupal.org/node/1110688
Justin il

@amateurbarista It's Pantheon Drupal.
Giustino,

1
Sei in grado di provare altri backend della cache? Ciò potrebbe potenzialmente identificare se stai riscontrando un problema con Views o con Redis.
mpdonadio

Risposte:


1

Sembra che tu abbia trovato la risposta giusta dall'IRC. "Coerentemente intermittente" nella mia esperienza è quando ci sono due fonti che riempiono la cache. Il più comune è quando si dispone di un sito di sviluppo e di un sito di staging / produzione su basi di codice diverse ma sullo stesso database. Le cache fornite da drupal di cui ho letto il codice per la connessione al database, quindi le informazioni di routing / funzione memorizzate nella cache verranno contaminate. Colpire la pagina di amministrazione / moduli aggiornerà la cache e le posizioni del modulo, colpire la pagina di elenco di amministrazione / visualizzazioni cancella il tuo errore perché aggiorna la comprensione del sito delle viste dal punto di vista del tuo sito anziché dalla prospettiva di qualsiasi cosa sia in conflitto con te.

Se hai la capacità di amministratore del server, cambia la password nel database del tuo sito e la password in settings.php, e vedi cosa si rompe. Le tue inserzioni dovrebbero smettere di essere corrotte e ciò che sta manomettendole dovrebbe rompersi ... a meno che non sia direttamente collegato al tuo sito e usando il tuo file settings.php.

Inoltre, controlla per assicurarti che non ci siano più installazioni del modulo viste nel tuo docroot.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.