Saya memiliki sekitar 13000 node untuk dihapus di situs Drupal 7. Saya telah mencoba modul Operasi Massal Views untuk menghapus 500 node sekaligus, tetapi waktu habis. Saya hanya dapat menghapus 50 node secara bersamaan.
Bagaimana saya bisa menghapus lebih dari 50 node sekaligus?
Jawaban:
VBO adalah standar de facto untuk node penghapusan massal, tidak ada cara yang lebih baik untuk melakukannya.
Saat VBO memproses dalam batch, ia hanya mengerjakan 1 (atau mungkin beberapa) node sekaligus. Jadi, jika Anda menerima kesalahan batas waktu yang terkait dengan penghapusan satu node, bukan ke seluruh operasi batch.
Resolusi standar untuk sesuatu seperti ini adalah untuk menambah waktu eksekusi PHP max untuk mengkompensasi.
sumber
Instal Devel. Lalu pergi ke admin / config / development / generate / content di D7 dan pilih semua jenis konten. Centang "Hapus Semua konten". Masukkan 0 pada "Berapa banyak node yang ingin Anda hasilkan?"
Klik Hasilkan.
Itu akan menghapus semua node.
sumber
generate-content
(genc
) yang datang dengan Devel Generate;drush help genc
untuk info penggunaan.Gunakan VBO dan jalankan dari Drush. Saya menggunakan metode berikut untuk menghapus lebih dari 1,5 juta node setelah pengujian skala.
drush vbo-execute my_view action :: views_bulk_operations_delete_item
Di mana, my_view adalah nama mesin dari tampilan Anda
Anda juga dapat menggunakan daftar drush vbo untuk menampilkan semua tampilan yang tersedia dan operasi massal mereka.
VBO sekarang harus dijalankan di shell, memberikan Anda umpan balik.
sumber
Ada modul Delete All di luar sana. Ini akan menghapus semua node dan / atau pengguna dari situs.
Ini juga memiliki dukungan Drush:
Contoh:
sumber
node_delete()
(bahkan tidak perlu repot-repot untuk menggunakannode_delete_multiple()
). Yang lebih mengkhawatirkan lagi, ia memiliki opsi yang menghapus data langsung dari tabel basis data tanpa menggunakan API bidang, dan tanpa menggunakan kait. Tidak ada pekerjaan batch sama sekali, itu hanya berjalan sampai script mati. IMHO modul yang sangat berbahaya.drush delete-all article
untuk menghapus artikel saya akan pergi untuk solusi ini.Gunakan Operasi Massal Tampilan - itu ide yang bagus. Tapi alih-alih memanggil operasi secara langsung, gunakan api batch. Di sini Anda dapat membaca artikel shor tentang hal itu. Kurangnya dokumentasi pada bagian itu adalah masalah yang diketahui .
sumber
Untuk menghapus node dalam jumlah besar (yaitu bulk) seperti dalam kasus Anda, Anda juga dapat menggunakan modul Delete massal untuk ini.
Itu akan menggunakan Batch API untuk menghapus node untuk menghindari masalah timeout atau memori ketika menghapus ribuan node dengan satu panggilan ke node_delete_multiple ().
Terlepas dari ini, Anda bahkan dapat mencoba Hapus semua modul untuk menghapus semua node dari jenis konten.
Semoga ini membantu.
sumber
Anda juga dapat membuat proses batch untuk itu menggunakan BATCH API dan dalam proses batch itu lakukan saja
Itu dia. Anda selesai di sini. Jika Anda ingin membuat perintah drush untuknya, Anda juga bisa membuatnya. Untuk referensi silakan lihat ini .
sumber
Jika Anda memiliki alasan untuk melakukannya dengan kode:
Anda juga memiliki banyak metode lain yang tersedia untuk memilih node yang akan dihapus.
sumber
Anda dapat mengambil saran Bobik dan memberi makan itu sebagai argumen 'drush php-eval' jika Anda benar-benar dalam keadaan darurat, tetapi saya berharap bahwa kinerjanya akan mirip dengan VBO, sementara menjadi sedikit lebih cepat. Jika kinerjanya benar-benar lambat, Anda mungkin ingin melihat modul apa yang memanggil hook_node_delete dengan menjepret basis kode untuk '_node_delete (' dan kemudian menentukan apakah Anda dapat menonaktifkan beberapa modul yang menggunakan kait itu atau tidak.
sumber