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 flushall
no 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
Respostas:
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.
fonte