удаление узла() не удаляет узлы
Я пытаюсь использовать функцию 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 записей.
2 answers
Вы можете обнаружить, что у вас все еще не хватает памяти, если у вас достаточно узлов типа drealty. Это происходит потому, что node_delete()
вызывает node_load()
, и это добавляет каждый узел в статический кэш. Если вы столкнетесь с этим, просто вызывайте node_load(NULL, NULL, TRUE)
один раз каждые 50-100 итераций.
Я сам нашел ответ. Мне пришлось запустить drush от имени администратора:
drush -u admin rets-flush
Я думал, что drush автоматически запускается как администратор, но, думаю, нет.