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のレコードがあります。
Drealtyタイプのノードが十分にある場合でも、メモリが不足することがあります。これは、node_delete()
がnode_load()
を呼び出し、各ノードを静的キャッシュに追加するためです。これに遭遇した場合、50-100回の繰り返しごとにnode_load(NULL, NULL, TRUE)
を呼び出すだけです。
自分で答えを見つけました。私は管理者としてdrushを実行する必要がありました:
drush -u admin rets-flush
Drushは管理者として自動的に実行されると思いましたが、そうではないようです。