У меня есть около 13000 узлов для удаления на сайте Drupal 7. Я попробовал модуль Views Bulk Operations для удаления 500 узлов одновременно, но время ожидания истекло. Я могу удалить только 50 узлов одновременно.
Как я могу удалить более 50 узлов одновременно?
Ответы:
VBO является стандартом де-факто для массового удаления узлов, просто нет лучшего способа сделать это.
Поскольку VBO обрабатывает в пакетах, он делает только 1 (или, возможно, пару) узлов одновременно. Так что, если вы получаете ошибки тайм-аута, это относится к удалению одного узла, а не ко всей пакетной операции.
Стандартным разрешением чего-то подобного является увеличение максимального времени выполнения PHP для компенсации.
источник
Установите Devel. Затем перейдите к admin / config / development / generate / content в D7 и выберите весь тип контента. Отметьте «Удалить все содержимое». Введите 0 в поле «Сколько узлов вы хотите сгенерировать?»
Нажмите Создать.
Это удалит все узлы.
источник
generate-content
(genc
), которая поставляется с Devel Generate;drush help genc
для использования информации.Используйте VBO и выполните его из Drush. Я использовал следующий метод для удаления более 1,5 миллионов узлов после масштабного тестирования.
drush vbo-execute my_view action :: views_bulk_operations_delete_item
Где my_view - имя машины вашего вида
Вы также можете использовать drush vbo-list для отображения всех доступных представлений и их массовых операций.
VBO теперь должен работать в оболочке, давая вам обратную связь по ходу дела.
источник
Там есть модуль Удалить все . Он удалит все узлы и / или пользователей с сайта.
Он также имеет поддержку Drush:
Примеры:
источник
node_delete()
(он даже не удосуживается использоватьnode_delete_multiple()
). Еще более тревожно то, что у него есть опция, которая удаляет данные непосредственно из таблиц базы данных без использования API полей и без использования хуков. Пакетных заданий вообще нет, он просто запускается до тех пор, пока скрипт не умрет. Очень опасный модуль ИМХО.drush delete-all article
удалить статьи, я бы выбрал это решение.Использовать Views Bulk Operations - это была хорошая идея. Но вместо непосредственного вызова операции используйте пакетный API. Здесь вы можете прочитать короткую статью об этом. Отсутствие документации по этой части было известной проблемой .
источник
Для удаления узлов в большом количестве (т.е. массовых), как в вашем случае, вы также можете использовать для этого модуль группового удаления .
При этом будет использоваться пакетный API для удаления узлов, чтобы избежать проблем с тайм-аутом или памятью при удалении тысяч узлов одним вызовом node_delete_multiple ().
Помимо этого, вы можете даже попробовать Удалить все модули для удаления всех узлов типа контента.
Надеюсь это поможет.
источник
Вы также можете создать пакетный процесс для него, используя BATCH API, и в этом пакетном процессе просто выполните
Это оно. Вы сделали здесь. Если вы хотите создать для нее команду drush, вы также можете создать ее. Для справки, пожалуйста, посмотрите на это .
источник
Если у вас есть причина сделать это с помощью кода:
У вас также есть много других доступных методов для выбора узлов для удаления.
источник
Вы можете принять совет Бобика и использовать его в качестве аргумента «drush php-eval», если вы действительно в затруднении, но я ожидаю, что производительность будет похожа на VBO, но будет немного быстрее. Если производительность действительно низкая, вы можете посмотреть, какие модули вызывают hook_node_delete, выделив кодовую базу для «_node_delete (») и затем определив, можете ли вы отключить некоторые из модулей, использующих этот хук.
источник