手動または自動でcronを実行できません。私は Cronデバッグモジュール をインストールし、すべてのモジュールをチェックしましたが、検索モジュールによってcronが動かなくなることがわかりました。無効にすると、cronが動作します。
私のノードの1つに悪いPHPコードが含まれているのが理由だと思います。「search_cronエラー」を探して、解決策を見つけました Drupal.org 試しましたnode.moduleを編集してそれを作成しましたが、次のエラーが発生しました:
致命的なエラー:2616行目の/home/mysite/public_html/modules/node/node.moduleにある未定義の関数db_fetch_object()の呼び出し
エラーのあるPHPコードをノードで見つける方法に関する解決策を提案できますか?私はDrupal 7.12を使用しています。
大きなアプリケーションを6から7にアップグレードした後、この問題に直面していました。これは私がやったことです。データベースからこのクエリを実行します
SELECT n.nid FROM node n LEFT JOIN search_dataset d ON d.type = 'node' AND d.sid =
n.nid WHERE
d.sid IS NULL OR d.reindex <> 0 ORDER BY d.reindex ASC, n.nid asc
これにより、問題が発生し、インデックスの再作成が拒否された最後のノードが得られます。そこから、そのノードでやりたいことができます。私の場合、コンテンツタイプ全体がうまく表示されないことに気付きました。このコンテンツタイプを表示するには、フィールドの1つを保存し直す必要がありました。
関数db_fetch_object()
はDrupal 7には存在しません。新しいデータベースAPIに置き換えられました。チェックアウト 動的クエリ、範囲、制限 または詳細 静的クエリ 。
この特定のケースでは、ほとんど同じ量のコードを書く必要はありません。スレッドが編集を提案するこの関数node_update_index()
は、Drupal 7。
_function node_update_index() {
$limit = (int)variable_get('search_cron_limit', 100);
$result = db_query_range("SELECT n.nid FROM {node} n LEFT JOIN {search_dataset} d ON d.type = 'node' AND d.sid = n.nid WHERE d.sid IS NULL OR d.reindex <> 0 ORDER BY d.reindex ASC, n.nid ASC", 0, $limit, array(), array('target' => 'slave'));
foreach ($result as $node) {
_node_index_node($node);
}
}
_
そのスレッドによると、ノードのインデックスが付けられているときにノードのnidを保存するだけで、問題の原因となっているノードを特定できます。そのためには、foreach
ループでwatchdog()
への呼び出しを追加するだけです。
_function node_update_index() {
$limit = (int)variable_get('search_cron_limit', 100);
$result = db_query_range("SELECT n.nid FROM {node} n LEFT JOIN {search_dataset} d ON d.type = 'node' AND d.sid = n.nid WHERE d.sid IS NULL OR d.reindex <> 0 ORDER BY d.reindex ASC, n.nid ASC", 0, $limit, array(), array('target' => 'slave'));
foreach ($result as $node) {
watchdog('cron', "about to index node " . $node->nid); /// ADD THIS TO DEBUG
_node_index_node($node);
}
}
_
Watch Dog行を追加するとうまくいきました。
ただし、アクティブなライブシステムで作業している場合:
2つのターミナルを開いた状態でdrushを使用して、次のコマンドを実行することをお勧めします。
1)drush search-index 2)drush watchdog-show
ビューページの作成、タイトルフィールドの追加、field_body、公開されたフィルターボディの追加-オプション「含む」、保存してページを開き、不正な文字列を見つけようとしますdb_fetch_object、それを削除するか修正します