Advanced Forumモジュールから頻繁に断続的にエラーが発生し、発生時に500エラーが発生します(WSOD)。本番環境では、1時間あたり約20回、1時間あたりのすべてのフォーラムページの読み込みの2〜3%で発生します。それは一貫して断続的に。ローカルでは、エラーを一貫して再現することはできませんが、実際には発生します。
エラーが発生しています
sites / 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()はビューの検索に失敗し、戻り行でオブジェクトが期待どおりに作成されません。そのため、ビューが存在することをビューが時々知らないという問題があるようです。これは、フックの問題だと思います。
奇妙になり始めるのは、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によって提供されたスタイルプラグインを参照したため、ビューは空白でした。
私はViewsフックに関する何かを見逃していると思いますが、完全に困惑しています。
- スタック:Drupal 7、Views(7.x-3.3)、CTools(7.x-1.0)、Advanced Forum(7.x-2.0)
- PHP FPM、APC、nginx、Redis
- 私はこのdoの問題に役立つものを見つけられませんでした
更新1:私は根本的な原因を解決していませんが、Redisを無効にし、Drupalのデフォルトのデータベースベースのキャッシュストレージメカニズムに戻すと、問題の発生が停止するようです。
更新2:flushall
Redisを実行することで、ローカルで問題を確実に再現できます。フォーラムのリストを見る最初のページのロードは致命的です。2番目のページ読み込み(およびそれ以降のすべて)は正常に動作します。更新:エラーをクリアするには、管理ビューのリストページにアクセスする必要があります。
更新3:さらにトラブルシューティングを行うと、Redisを使用している場合にのみ、キャッシュのクリア後にビューキャッシュが正しく再構築されないために問題が発生するようです。標準のDrupalキャッシュに戻す場合、この問題は発生しません。この問題が発生すると、キャッシュが適切に構築されている場合は100以上であるのに対して、ビューには2〜4個のキャッシュエントリしか存在しません。管理ビューリストページにアクセスすると、キャッシュが完全に構築され、問題は発生しません。問題の原因となっているビュービューページにアクセスするか、高度なフォーラムビューにアクセスするかを確認する必要があります。
UPDATE 4::IRC上の有益ユーザーは、これはビューキャッシュ競合状態の問題に関連する問題がある可能性があります示唆している853864、1102252