web-dev-qa-db-ja.com

node_delete()はノードを削除していません

drupal 6 installのdrealtyモジュールのノードをすべてフラッシュするために、drush関数を使用しようとしています。ただし、何かがメモリリークを引き起こしており、node_deleteの後にノードが削除されていません。と呼ばれます。

メモリ不足のエラーは次のとおりです。

drush rets-flush
PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /home/directory/public_html/sites/all/modules/filefield/field_file.inc on line 300
Drush command terminated abnormally due to an unrecoverable error.   [error]
Error: Allowed memory size of 134217728 bytes exhausted (tried to
allocate 71 bytes) in
/home/directory/public_html/sites/all/modules/filefield/field_file.inc,
line 300

以下は、drush rets-flush関数です。

function drush_drealty_rets_flush() {
  set_time_limit(0);

  $result = db_query("SELECT nid FROM {node} WHERE type = 'drealty_property' OR type = 'drealty_agent' OR type = 'drealty_office' OR type = 'drealty_open_house'", $conid);

  $count = 0;
  while ($nid = db_fetch_object($result)) {
    node_delete($nid->nid);
    drush_log(dt('Deleting node id: @nid. ', array('@nid' => $nid->nid)));
    $count++;
  }
  drush_log(dt('Deleted @count nodes', array('@count' => $count)), 'success');
}

合計で約5000のレコードがあります。

2
Arosboro

Drealtyタイプのノードが十分にある場合でも、メモリが不足することがあります。これは、node_delete()node_load()を呼び出し、各ノードを静的キャッシュに追加するためです。これに遭遇した場合、50-100回の繰り返しごとにnode_load(NULL, NULL, TRUE)を呼び出すだけです。

2
justintime

自分で答えを見つけました。私は管理者としてdrushを実行する必要がありました:

drush -u admin rets-flush

Drushは管理者として自動的に実行されると思いましたが、そうではないようです。

2
Arosboro