Advanced Forum 모듈에서 자주 발생하는 오류 (WSOD)가 발생하면 500 오류가 발생합니다. 프로덕션 환경에서는 시간당 약 20 회 발생하며 시간당 모든 포럼 페이지로드의 2-3 %에 해당합니다. 그것은이다 지속적으로 단속 . 로컬에서는 오류를 일관되게 재현 할 수 없지만 발생합니다.
오류가 있습니다
site / all / modules / contrib / advanced_forum / includes / core-overrides.inc의 라인 232 :
정의되지 않은 메소드 stdClass :: preview () 호출
문제는 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));
}
본질적으로 views_get_view ()가 뷰를 찾지 못하고 리턴 라인에서 예상대로 오브젝트가 작성되지 않습니다. 따라서 문제는 때때로 뷰가 존재한다는 것을 알지 못하는 Views에 있습니다. 이것은 내가 후크 문제라고 생각하게합니다.
이상하게 시작되는 곳은 hook_views_default_views () 및 hook_views_plugins ()의 구현입니다. views.api.php에 따르면 hook_views_default_views ()는 MODULENAME.views_default.inc라는 파일에 있어야하고 hook_views_plugins ()는 MODULENAME.views.inc라는 파일에 있어야합니다. 그러나 두 파일 모두 MODULENAME.views.inc 파일에 있습니다.
views.api.php에서 :
hook_views_plugins()
이 후크는 MODULENAME.views.inc에 위치해야하며 자동로드됩니다.
MODULENAME.views.inc는 MODULENAME_views_api ()에 의해 리턴 된 'path'키로 지정된 디렉토리 또는 'path'가 지정되지 않은 경우 .module 파일과 동일한 디렉토리에 있어야합니다.hook_views_default_views()
이 후크는 MODULENAME.views_default.inc에 있어야하며 자동로드됩니다. MODULENAME.views_default.inc는 MODULENAME_views_api ()에 의해 리턴 된 'path'키로 지정된 디렉토리 또는 'path'가 지정되지 않은 경우 .module 파일과 동일한 디렉토리에 있어야합니다.
이 루틴을 겉보기에 올바른 파일로 분할하려고했습니다. 이로 인해 Views는 Advanced Forum보기를 일관되게 찾게되었지만 (Views GUI 목록에 표시됨) 플러그인을 볼 수 없었습니다. Advanced Forum의 페이지는 제대로 실행되었지만 View는 더 이상 표시되지 않는 Advanced Forum에서 제공 한 스타일 플러그인을 참조했기 때문에보기가 비어있었습니다.
뷰 후크에 대해 누락 된 것으로 가정하지만 완전히 혼란에 빠졌습니다.
- 스택 : Drupal 7, 뷰 (7.x-3.3), CTools (7.x-1.0), 고급 포럼 (7.x-2.0)
- PHP FPM, APC, nginx, 레디 스
- 이 문제에 도움이되는 것을 찾지 못했습니다.
업데이트 1 : 근본 원인을 해결하지는 못했지만 Redis를 비활성화하고 Drupal의 기본 데이터베이스 기반 캐시 스토리지 메커니즘으로 되 돌리면 문제가 발생하지 않습니다.
업데이트 2 : flushall
Redis에서 수행하여 로컬에서 문제를 안정적으로 복제 할 수 있습니다 . 포럼 목록을 보는 첫 페이지로드는 치명적입니다. 두 번째 페이지로드 (및 모든 후속)가 정상적으로 작동합니다 . 업데이트 : 오류를 지우려면 관리자 조회 목록 페이지를 방문해야합니다.
업데이트 3 : 추가 문제 해결시 캐시를 지운 후 Redis를 사용할 때만 Views 캐시가 올바르게 다시 작성되지 않아 문제가 발생한 것으로 보입니다. 표준 Drupal 캐시로 되돌릴 때 문제가 발생하지 않습니다. 이 문제가 발생하면 캐시가 올바르게 구축 된 경우 100+가 아니라보기에 2-4 개의 캐시 항목 만 존재합니다. 관리자보기 목록 페이지를 방문하면 캐시가 완전히 빌드되고 문제가 발생하지 않습니다. View view 페이지를 방문하여 문제가 발생했는지 또는 고급 포럼보기인지 확인해야합니다.
업데이트 4 : IRC의 도움이되는 사용자는 이것이 Views 캐시 경쟁 조건 문제와 관련된 문제 일 수 있다고 제안했습니다 : 853864 , 1102252