Eu tenho cerca de 13000 nós para excluir em um site Drupal 7. Tentei o módulo Views Bulk Operations para excluir 500 nós de cada vez, mas o tempo limite se esgotou. Só posso excluir 50 nós por vez.
Como posso excluir mais de 50 nós por vez?
Eu tenho cerca de 13000 nós para excluir em um site Drupal 7. Tentei o módulo Views Bulk Operations para excluir 500 nós de cada vez, mas o tempo limite se esgotou. Só posso excluir 50 nós por vez.
Como posso excluir mais de 50 nós por vez?
Respostas:
VBO é o padrão de fato para nós de exclusão em massa, simplesmente não há uma maneira melhor de fazê-lo.
Como o VBO processa em lotes, ele faz apenas 1 (ou talvez alguns) nós de cada vez. Portanto, se você estiver recebendo erros de tempo limite, estão relacionados à exclusão de um único nó, não a toda a operação em lote.
A resolução padrão para algo assim é aumentar o tempo máximo de execução do PHP para compensar.
Instale o Devel. Em seguida, vá para admin / config / development / generate / content no D7 e selecione todo o tipo de conteúdo. Marque "Excluir todo o conteúdo". Digite 0 em "Quantos nós você gostaria de gerar?"
Clique em gerar.
Isso excluirá todos os nós.
generate-content
( genc
) que acompanha o Devel Generate; drush help genc
para informações de uso.
Use um VBO e execute-o no Drush. Usei o método a seguir para excluir mais de 1,5 milhões de nós após o teste de escala.
Drush vbo-executar my_view ação :: views_bulk_operations_delete_item
Onde, my_view é o nome da máquina da sua visualização
Você também pode usar drush vbo-list para exibir todas as visualizações disponíveis e suas operações em massa.
O VBO agora deve ser executado no shell, fornecendo feedback à medida que for sendo executado.
Existe um módulo Excluir tudo por aí. Ele excluirá todos os nós e / ou usuários do site.
Ele também tem suporte ao Drush:
Exemplos:
drush delete-all article Delect all article nodes.
drush delete-all all Delete nodes of all types.
drush delete-all --reset Delete nodes of all types, and reset node, revision and comment counters.
drush delete-all users Delete users.
node_delete()
(ele nem se incomoda em usar node_delete_multiple()
). Ainda mais preocupante, ele possui uma opção que exclui dados diretamente das tabelas do banco de dados sem usar a API do campo e sem usar ganchos. Nenhum trabalho em lote, ele é executado até o script morrer. Módulo muito perigoso IMHO.
drush delete-all article
excluir artigos, eu usaria esta solução.
Use as operações em massa do Views - foi uma boa ideia. Mas, em vez de chamar a operação diretamente, use a API do lote. Aqui você pode ler um artigo sobre isso. A falta de documentação nessa parte era um problema conhecido .
Para excluir nós em número grande (ou seja, em massa), como no seu caso, você também pode usar o módulo de exclusão em massa para isso.
Isso usará a API do Lote para excluir os nós para evitar problemas de tempo limite ou memória ao excluir milhares de nós com uma única chamada para node_delete_multiple ().
Além disso, você pode até tentar Excluir todos os módulos para excluir todos os nós de um tipo de conteúdo.
Espero que isto ajude.
Você também pode criar um processo em lote para ele usando a API BATCH e, nesse processo em lote, basta
foreach($nodes as $node){ node_delete($node[nid]);}
É isso aí. Você terminou aqui. Se você deseja criar um comando drush para ele, também pode criá-lo. Para referência, veja isso .
Se você tiver motivos para fazê-lo por código:
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->propertyOrderBy('nid', 'DESC')
->range(1000, 1000);
$result = $query->execute();
node_delete_multiple(array_keys($result['node']));
Você também tem muitos outros métodos disponíveis para selecionar nós a serem excluídos.
Você pode seguir o conselho de Bobik e alimentá-lo como o argumento de um 'drush php-eval' se você estiver realmente preocupado, mas eu esperaria que o desempenho seja semelhante ao da VBO, embora seja um pouco mais rápido. Se o desempenho for realmente lento, convém dar uma olhada no que os módulos estão chamando hook_node_delete, cumprimentando a base de código para '_node_delete (' e determinando se você pode ou não desabilitar alguns dos módulos que estão usando esse gancho).