ビューが常に、しかし断続的に、アドバンストフォーラムモジュールによって提供されるビューを見つけられない原因は何ですか?


15

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のデフォルトのデータベースベースのキャッシュストレージメカニズムに戻すと、問題の発生が停止するようです。

更新2flushallRedisを実行することで、ローカルで問題を確実に再現できます。フォーラムのリストを見る最初のページのロードは致命的です。2番目のページ読み込み(およびそれ以降のすべて)は正常に動作します。更新:エラーをクリアするには、管理ビューのリストページにアクセスする必要があります。

更新3:さらにトラブルシューティングを行うと、Redisを使用している場合にのみ、キャッシュのクリア後にビューキャッシュが正しく再構築されないために問題が発生するようです。標準のDrupalキャッシュに戻す場合、この問題は発生しません。この問題が発生すると、キャッシュが適切に構築されている場合は100以上であるのに対して、ビューには2〜4個のキャッシュエントリしか存在しません。管理ビューリストページにアクセスすると、キャッシュが完全に構築され、問題は発生しません。問題の原因となっているビュービューページにアクセスするか、高度なフォーラムビューにアクセスするかを確認する必要があります。

UPDATE 4::IRC上の有益ユーザーは、これはビューキャッシュ競合状態の問題に関連する問題がある可能性があります示唆している8538641102252


Views、Ctools、またはAdvanced Forumキューで問題を作成しようとしましたか?目の前の質問は、ViewsまたはAdvanced Forumが現在redisをサポートしているように思えます。私の知る限り、Viewsはリレーショナルクエリ言語(SQL)を使用して表示を構築します。それがRedis(キーバリューストア)でどれだけうまく機能するかはわかりません。これは実際には答えではありませんが、それに対する答えがあるかどうかは個人的にわかりません。この質問については、drupal IRCチャンネルに連絡することもお勧めします。幸運を。
アマチュアバリスタ

興味深いセットアップがあります。
アマチュアバリスタ

私はRedisをDrupalのキャッシュバックエンドのドロップイン代替としてのみ使用しているため、Viewに対して透過的でなければなりません。私は運なしでDoに投稿しました。drupal.org/node/1110688
ジャスティン

@amateurbaristaそれはパンテオン・ドルパルです。
ジャスティン

1
他のキャッシュバックエンドを試すことができますか?これにより、ビューに問題があるのか​​、Redisに問題があるのか​​を特定できる可能性があります。
mpdonadio

回答:


1

IRCから正しい答えを見つけたようです。私の経験では、「一貫して断続的に」キャッシュを埋めるソースが2つある場合です。最も一般的なのは、異なるコードベースで同じデータベース上に開発サイトとステージング/運用サイトがある場合です。データベースに接続するためのコードを読み取ったdrupal提供のキャッシュは、キャッシュされているルーティング/機能情報が相互に汚染されます。admin / modulesページを押すとモジュールのキャッシュと場所が更新され、admin / viewsリストページを押すとエラーがクリアされます。競合するものの観点ではなく、サイトの観点からのサイトのビューの理解が更新されるためです。

サーバー管理機能がある場合は、サイトのデータベースのパスワードとsettings.phpのパスワードを変更し、何が壊れているかを確認してください。リスティングの破損が停止し、改ざんされているものが壊れるはずです...サイトに直接接続されていて、settings.phpファイルを使用している場合を除きます。

また、docrootにviewsモジュールが複数インストールされていないことを確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.