удаление узла() не удаляет узлы


Я пытаюсь использовать функцию drush, чтобы удалить все узлы модуля drealty в моей установке drupal 6. Однако что-то вызывает утечку памяти, и узлы не удаляются после вызова 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-промывка:

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 записей.

Author: kiamlaluno, 2011-04-05

2 answers

Вы можете обнаружить, что у вас все еще не хватает памяти, если у вас достаточно узлов типа drealty. Это происходит потому, что node_delete() вызывает node_load(), и это добавляет каждый узел в статический кэш. Если вы столкнетесь с этим, просто вызывайте node_load(NULL, NULL, TRUE) один раз каждые 50-100 итераций.

 2
Author: justintime, 2011-04-05 19:40:49

Я сам нашел ответ. Мне пришлось запустить drush от имени администратора:

drush -u admin rets-flush

Я думал, что drush автоматически запускается как администратор, но, думаю, нет.

 2
Author: Arosboro, 2011-04-05 20:21:26