Estoy tratando de usar una función drush para eliminar todos los nodos del módulo drealty en mi instalación drupal 6. Sin embargo, algo está causando una pérdida de memoria y los nodos no se eliminan después de node_delete se llama ¿Qué puedo hacer?
Aquí está el error de memoria agotada:
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
Aquí está la función 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');
}
Hay alrededor de 5000 registros en total.
Es posible que aún se quede sin memoria si tiene suficientes nodos del tipo drealty. Esto se debe a que node_delete()
llama a node_load()
, y eso agrega cada nodo a una caché estática. Si se encuentra con esto, simplemente llame a node_load(NULL, NULL, TRUE)
una vez cada 50 - 100 iteraciones.
Encontré la respuesta yo mismo. Tuve que ejecutar drush como administrador:
drush -u admin rets-flush
Pensé que drush se ejecutaba como administrador automáticamente, pero supongo que no.