O que está fazendo com que o Views, de maneira consistente, mas intermitente, não encontre o modo de exibição fornecido pelo módulo Fórum Avançado?

15

Estou recebendo um erro frequente e intermitente no módulo Fórum Avançado que causa um erro 500 quando ocorre (WSOD). Na produção, isso acontece cerca de 20 vezes por hora, provavelmente em 2-3% de todas as páginas carregadas por hora. É consistentemente intermitente . Localmente, não consigo reproduzir consistentemente o erro, mas ele ocorre.

O erro está ativado

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

Chamar para o método indefinido stdClass :: preview ()

O problema está na função 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));

}

Essencialmente, views_get_view () falha ao encontrar a visualização e o objeto não é criado conforme o esperado na linha de retorno. Portanto, o problema parece estar no Views ocasionalmente sem saber que o view existe. Isso me faz pensar que é um problema de gancho.

Onde começa a ficar estranho são as implementações de hook_views_default_views () e hook_views_plugins (). De acordo com views.api.php, hook_views_default_views () deve estar em um arquivo chamado MODULENAME.views_default.inc e hook_views_plugins () deve estar em um arquivo chamado MODULENAME.views.inc. No entanto, os dois arquivos estão no arquivo MODULENAME.views.inc.

Em views.api.php:

  • hook_views_plugins()
    Esse gancho deve ser colocado em MODULENAME.views.inc e será carregado automaticamente.
    MODULENAME.views.inc deve estar no diretório especificado pela chave 'path' retornada por MODULENAME_views_api () ou no mesmo diretório que o arquivo .module, se 'path' não for especificado.

  • hook_views_default_views()
    Este gancho deve ser colocado em MODULENAME.views_default.inc e será carregado automaticamente. MODULENAME.views_default.inc deve estar no diretório especificado pela chave 'path' retornada por MODULENAME_views_api () ou no mesmo diretório que o arquivo .module, se 'path' não for especificado.

Tentei dividir essas rotinas em arquivos aparentemente corretos. Isso fez com que o Views localizasse consistentemente a visualização do Fórum Avançado (conforme indicado na lista GUI do Views), mas não o plug-in. As páginas no Fórum Avançado funcionaram bem, mas as visualizações estavam em branco porque faziam referência a um plug-in de estilo fornecido pelo Fórum Avançado que o Views não estava mais vendo.

Suponho que estou perdendo algo nos ganchos do Views, mas estou totalmente perplexo.

  • Stack: Drupal 7, Views (7.x-3.3), CTools (7.x-1.0), Fórum avançado (7.x-2.0)
  • PHP FPM, APC, nginx, Redis
  • Não encontrei nada útil nesta edição

ATUALIZAÇÃO 1 : Embora eu não tenha resolvido a causa raiz, parece que desabilitar o Redis e reverter para o mecanismo de armazenamento em cache padrão do Drupal, baseado em banco de dados, impede que o problema ocorra.

ATUALIZAÇÃO 2 : Posso replicar o problema de forma confiável no local, fazendo um flushallno Redis. O carregamento da primeira página de uma listagem de fórum será fatal. O carregamento da segunda página (e todos os subsequentes) funciona bem . ATUALIZAÇÃO: Preciso acessar a página de listagem de visualizações do administrador para corrigir o erro.

ATUALIZAÇÃO 3 : Na solução de problemas posteriores, o problema parece ser causado pelo fato de o cache do Views não ter sido reconstruído corretamente após a limpeza do cache, somente ao usar o Redis. O problema não ocorre ao reverter para o cache Drupal padrão. Quando o problema ocorre, existem apenas 2 a 4 entradas de cache para as Views, em vez de mais de 100 quando o cache é criado corretamente. Visitar a página da lista de visualizações do administrador faz com que o cache seja totalmente construído e o problema não ocorra. Preciso verificar se estou acessando uma página de visualização de exibição que está causando o problema ou apenas a visualização avançada do fórum.

ATUALIZAÇÃO 4 : um usuário útil no IRC sugeriu que este poderia ser um problema relacionado aos problemas de condição de corrida do cache do Views: 853864 , 1102252

Justin
fonte
Você tentou criar um problema na fila Views, Ctools ou Advanced Forum? Parece-me que a pergunta em questão é se o Views ou o Fórum Avançado atualmente suporta redis? Tanto quanto sei, o Views usa uma linguagem de consulta relacional (SQL) para construir suas exibições. Não sei até que ponto isso aconteceria com Redis (uma loja de valores-chave). Esta não é realmente uma resposta, mas, pessoalmente, não sei se há uma resposta para isso. Eu também recomendo que você entre em contato com os canais drupal de IRC para esta pergunta. Boa sorte.
Barista amador
Configuração interessante que você tem lá.
Barista amador
Estou apenas usando o Redis como um substituto para o back-end de cache do Drupal, portanto ele deve ser transparente para o Views. Eu postei para fazer sem sorte. drupal.org/node/1110688
Justin #
@amateurbarista É o Pantheon Drupal.
Justin
11
Você está em condições de experimentar outros back-ends de cache? Isso pode identificar se você está tendo um problema com o Views ou com o Redis.
mpdonadio

Respostas:

1

Parece que você encontrou a resposta certa no IRC. "Consistentemente intermitente" na minha experiência é quando há duas fontes preenchendo o cache. O mais comum é quando você tem um site de desenvolvimento e um site de preparação / produção em diferentes bases de código, mas no mesmo banco de dados. Os caches fornecidos pelo drupal que eu li no código para conectar-se ao banco de dados, para que as informações de roteamento / função armazenadas em cache sejam contaminadas. Pressionar a página admin / modules atualizará o cache e os locais do módulo. Pressionar a página de listagem admin / views limpa seu erro, pois atualiza o entendimento das visualizações do site da perspectiva do site, em vez da perspectiva do que estiver em conflito com você.

Se você possui a capacidade de administrador do servidor, altere a senha para o banco de dados do seu site e a senha em settings.php e veja o que quebra. Suas listagens devem parar de ser corrompidas e o que está interferindo com elas deve quebrar ... a menos que esteja diretamente conectada ao seu site e usando o arquivo settings.php.

Além disso, verifique se não há várias instalações do módulo views na sua docroot.

DeveloperWeeks
fonte