Tengo unos 13000 nodos para eliminar en un sitio de Drupal 7. He intentado con el módulo Views Bulk Operations para eliminar 500 nodos a la vez, pero se agota el tiempo de espera. Solo puedo eliminar 50 nodos a la vez.
¿Cómo puedo eliminar más de 50 nodos a la vez?
Respuestas:
VBO es el estándar de facto para nodos de eliminación masiva, simplemente no hay una mejor manera de hacerlo.
A medida que VBO procesa en lotes, solo hace 1 (o tal vez un par) de nodos a la vez. Entonces, si está recibiendo errores de tiempo de espera, estos están relacionados con la eliminación de un solo nodo, no con la operación por lotes completa.
La resolución estándar para algo como esto es aumentar el tiempo máximo de ejecución PHP para compensar.
fuente
Instalar Devel. Luego vaya a admin / config / development / generate / content en D7 y seleccione todo tipo de contenido. Marque "Eliminar todo el contenido". Ingrese 0 en "¿Cuántos nodos le gustaría generar?"
Haz clic en Generar.
Eso eliminará todos los nodos.
fuente
generate-content
(genc
) que viene con Devel Generate;drush help genc
para información de uso.Use un VBO y ejecútelo desde Drush. Utilicé el siguiente método para eliminar más de 1.5 millones de nodos después de las pruebas de escala.
drush vbo-execute my_view action :: views_bulk_operations_delete_item
Dónde, my_view es el nombre de la máquina de su vista
También puedes usar drush vbo-list para mostrar todas las vistas disponibles y sus operaciones masivas.
El VBO ahora debería ejecutarse en el shell, proporcionándole comentarios sobre la marcha.
fuente
Hay un módulo Eliminar todo por ahí. Eliminará todos los nodos y / o usuarios del sitio.
También tiene soporte Drush:
Ejemplos:
fuente
node_delete()
(ni siquiera se molesta en usarlonode_delete_multiple()
). Aún más preocupante, tiene una opción que elimina datos directamente de las tablas de la base de datos sin usar la API de campo y sin usar ganchos. No hay trabajos por lotes en absoluto, solo se ejecuta hasta que el script muere. Módulo muy peligroso en mi humilde opinión.drush delete-all article
para eliminar artículos, iría por esta solución.Utilice las vistas de operaciones masivas: fue una buena idea. Pero en lugar de llamar a la operación directamente, use la API por lotes. Aquí puedes leer shor artículo al respecto. La falta de documentación en esa parte era un problema conocido .
fuente
Para eliminar nodos en gran número (es decir, en masa) como en su caso, también puede usar el módulo de eliminación masiva para esto.
Eso utilizará la API de Batch para eliminar los nodos para evitar problemas de tiempo de espera o memoria al eliminar miles de nodos con una sola llamada a node_delete_multiple ().
Aparte de esto, incluso puede intentar Eliminar todo el módulo para eliminar todos los nodos de un tipo de contenido.
Espero que esto ayude.
fuente
También puede crear un proceso por lotes para él utilizando BATCH API y en ese proceso por lotes simplemente haga
Eso es. Ya terminaste aquí. Si desea crear un comando drush para él, también puede crearlo. Como referencia, mira esto .
fuente
Si tiene razones para hacerlo por código:
También tiene muchos otros métodos disponibles para seleccionar nodos para eliminar.
fuente
Puede tomar el consejo de Bobik y alimentarlo como el argumento de un 'drush php-eval' si realmente está en apuros, pero esperaría que el rendimiento sea similar al de VBO, aunque sea un poco más rápido. Si el rendimiento es realmente lento, es posible que desee ver qué módulos están llamando a hook_node_delete agrupando la base de código para '_node_delete (' y luego determinando si puede o no desactivar algunos de los módulos que están usando ese gancho.
fuente