Nonaktifkan modul secara manual

39

Di Drupal 7, saya bisa secara manual mengedit {system}tabel dalam database untuk menonaktifkan modul stubbon. Di situs Drupal 8 saya, tabel ini hilang.

Bagaimana saya bisa menonaktifkan modul secara manual di Drupal 8?

bumpaw
sumber

Jawaban:

34

systemData tabel Drupal 7 sekarang disimpan dalam configtabel di Drupal 8 terhadap core.extensionparameter.

Solusi 1: Perbarui konfigurasi

Anda dapat menjalankan kode berikut menggunakan drush evalatau mungkin menggunakan ketentuan modul Devel untuk Execute PHP Code.

// Read the configuration.
$module_data = \Drupal::config('core.extension')->get('module');

// Unset the modules you do not need.
unset($module_data['MODULE_NAME']);

// Write the configuration.
\Drupal::configFactory()->getEditable('core.extension')->set('module', $module_data)->save();

Anda dapat melakukan ini semua dalam satu baris cepat drush.

drush eval "\$module_data = \Drupal::config('core.extension')->get('module'); unset(\$module_data['MODULE_NAME']); \Drupal::configFactory()->getEditable('core.extension')->set('module', \$module_data)->save();"

Solusi 2: Edit tabel konfigurasi jika Anda tidak dapat menjalankan PHP

Jika situs rusak karena modul yang bermasalah dan Anda bahkan tidak dapat menjalankan kode PHP, mungkin Anda dapat mengedit configtabel secara langsung.

Di baris dalam configtabel di mana name = "core.extension"dan edit kolom BLOB data. Ini dataadalah array PHP berseri tempat Anda harus menghapus modul yang ingin Anda singkirkan dari modulekunci konfigurasi.

Solusi 3: Solusi cepat dan kotor

  • Hapus modul dari sistem file
  • Pangkas meja cache_config

Namun, solusi ini dapat menghasilkan pesan yang mengatakan modul tidak ada dalam sistem file yang berarti ada sesuatu yang salah. Tetapi setidaknya modul yang rusak dinonaktifkan dan Anda dapat mengakses situs Anda dalam sebagian besar kasus.

Membersihkan Cache

Terkadang Anda mungkin harus menghapus cache setelah mengikuti langkah-langkah di atas. Baca dokumentasi praktis ini tentang cara menghapus cache .

Jigarius
sumber
1
Dalam hal menghapus modul saya pikir ini adalah solusi terbaik.
David
1
Jika Anda perlu menghapus modul tetapi tidak bisa karena tabel untuk modul tidak ada, Anda dapat menggunakan opsi ketiga dengan drush eval. Contoh one-liner adalah: drush eval "\$module_data = \Drupal::config('core.extension')->get('module'); unset(\$module_data['example_module']); \Drupal::configFactory()->getEditable('core.extension')->set('module', \$module_data)->save();Perhatikan tanda dolar yang lolos sehingga baris perintah tidak salah menafsirkan $modulesebagai variabel Bash.
sillygwailo
Sorakan untuk liner malas! Namun tidak ada kutipan di akhir
Matt Fletcher
Cukup penting Anda melakukan cache dengan jelas, dan kemudian mengekspor konfigurasi agar konfigurasi tidak mencoba menginstal ulang sampai Anda siap.
Adaddinsane
16

Melakukan hal ini:

rm -rf modules/your_stubborn_module
rm -rf sites/default/files/php
manish_s
sumber
Bergantung pada modul, Anda mungkin harus menghapus beberapa entri dari tabel konfigurasi (lihat jawaban valli) dan beberapa tabel lainnya.
Turion
Ini tidak berhasil untuk saya.
rooby
Anda harus lari drush cache-rebuildjuga
Langit
16
  • Secara manual mengedit configtabel di mana name = 'core.extension'dan menghapus modul dari gumpalan data yang merupakan array serial.
  • Berhati-hatilah untuk mengurangi panjang array modul (...s:6:"module";a:HERE;{...)
  • Pangkas cache_configtabel dari phpmyadmin atau gunakan baris perintah.
valli
sumber
1
Terima kasih, ini membantu saya. Jawabannya harus bertuliskan " Edit tabel {config} secara manual ". Bagian teks yang akan dihapus dari konten BLOB adalah:i:0;s:8:"name of the module";
Hendrik
2
Jawaban ini membantu menyelesaikan situasi di mana modul tidak dapat dihapus atau diinstal ulang karena entitas kustom yang didefinisikan tidak ada.
daniels
1
@ hendrick, ini mungkin berhasil untuk Anda, tetapi string untuk menghapus setiap modul harus disusun sebagai s:8:"name of the module";i:0;. Yang dimaksud @valli adalah array yang menggambarkan jumlah modul harus dikurangi jumlahnya dengan jumlah modul yang dihapus. Awal dari gumpalan di setup saya adalah a:4:{s:6:"module";a:59:{, yang merupakan array dari 59 modul. Jika Anda menghapus dua ubah nilai array menjadi 57.
dimmech
4

Di Drupal 8, cobalah untuk menghapus modul dari folder modul Anda dan jalankan rebuild.php.

Coba drush pm-uninstall module-namejuga.

DRUPWAY
sumber
3

Pertimbangkan menggunakan Drush. Drupal 8 masih mendefinisikan apa yang dimaksud dengan "menonaktifkan modul". Ada diskusi berkelanjutan jika harus ada pilihan itu atau harus dihapus.

Mołot
sumber
Saya mengembangkan secara lokal pada PC windows dan terakhir kali saya melihat Drush belum siap untuk Drupal 8. Saya harus melihat lagi.
bumpaw
@umpump Drush juga bisa digunakan di Windows. Setidaknya itu akan membantu Anda secara lokal. Ketika datang ke server produksi, saya tahu banyak host berbagi tidak memberi Anda Drush atau bahkan SSH yang biasanya membuat cara manajemen lebih rumit. drush.org/drush_windows_installer
hampusn
Dan, menggunakan drush, bagaimana cara seseorang "menghapus secara manual" modul dengan cara yang berbeda dari proses UI? Tampaknya Anda tidak menjawab pertanyaan itu.
1kenthomas
2

Saya mencoba semua jawaban lain tetapi terus mendapatkan pesan kesalahan drupal. Untuk mengatasinya saya harus menghapus baris dari tabel key_value (mencari nama modul di kolom nama)

diesonne
sumber
2

Jika Anda perlu memperbarui sesuatu yang berkaitan dengan konfigurasi Drupal, dalam hal ini core.extension, gunakan Drush:

[Drush 8.x dalam contoh ini]

drush cedit core.extension
Jakub Mroz
sumber
1

Ada modul untuk itu. Modul ini diposting pada Agustus-2013 di drupal.org . Dalam hal seseorang membutuhkan.

Nonaktifkan modul

Sebagaimana dinyatakan pada halaman modul ini,

Drupal 8 telah menghapus kemampuan untuk menonaktifkan modul karena berbagai alasan. Lihat # 1199946: Modul yang dinonaktifkan rusak tidak dapat diperbaiki sehingga fungsionalitas "nonaktif" perlu dihapus dan banyak masalah lain dalam antrian berbagai modul inti dan modul kontribusi.

Modul ini mengembalikan kemampuan untuk (sementara) menonaktifkan modul dari UI atau dengan Drush. Perhatikan, bahwa tidak ada jaminan untuk konten Anda, konfigurasi atau bahkan situs Anda setelah Anda menonaktifkan modul.

CodeNext
sumber
0

Begini caranya, saya secara manual menghapus sebuah modul bernama "better_messages" dari instance Drupal 8 saya. Segera setelah saya menginstal modul "better_messages", situs tersebut mati. Jadi tidak ada cara untuk menghapus modul dari antarmuka pengguna. Saya tidak menginstal Drush. Saya telah melakukan banyak pengaturan yang diberikan di forum, tetapi inilah yang akhirnya berhasil bagi saya.

1 Mengganti nama modul menjadi old_better_messages di folder modul.

  1. Melalui url, jalankan http: // IP: port / foldername / rebuild.php . Ini memastikan situs itu kembali, tetapi hanya dalam mode baca-saja. Saya tidak bisa melakukan kegiatan admin atau mengedit artikel.

  2. Digunakan perintah berikut untuk menghapus entri dari database

HAPUS DARI key_value WHERE collection = 'system.schema' AND name = 'better_messages';

Dalam kasus saya, tidak ada entri dalam database. Saya pikir itu mungkin telah dihapus karena berbagai aksi yang saya lakukan sebelumnya.

  1. Kemudian menggunakan DB visualizer, saya menghapus entri dari semua tabel yang dimulai dengan cache.

Ini menyelesaikan masalah. Ini didasarkan pada interpretasi saya tentang https://www.drupal.org/node/2487215

Soumya Rajiv
sumber
0

Jawaban Jigarius di atas, semacam berhasil ...

Saya harus: // Baca konfigurasi.

$module_data = \Drupal::config('core.extension')->get()['module'];

Yang harus melakukan hal yang sama. Tidak yakin mengapa itu tidak berhasil seperti yang ditulis Jigarius ...

pengguna356540
sumber