Bir modülü manuel olarak devre dışı bırak


39

Drupal 7'de {system}bir stubbon modülünü devre dışı bırakmak için veritabanındaki tabloyu el ile düzenleyebilirim . Drupal 8 sitemde bu tablo gitti.

Drupal 8'deki bir modülü nasıl manüel olarak devre dışı bırakabilirim?

Yanıtlar:


34

Drupal 7 systemtablo verileri şimdi parametreye configkarşı Drupal 8'deki tabloya kaydedilir core.extension.

1. Çözüm: Yapılandırmayı güncelleyin

Aşağıdaki kodu çalıştırabilir drush evalveya Devel modülünün provizyonunu kullanıyor olabilirsiniz 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();

Bunları hızlı bir tek astarla yapabilirsiniz 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();"

2. Çözüm: PHP'yi çalıştıramıyorsanız yapılandırma tablosunu düzenleyin

Site sorunlu modül nedeniyle bozulursa ve hatta PHP kodunu çalıştıramazsanız, configdoğrudan tabloyu düzenleyebilirsiniz .

configTablodaki satırda name = "core.extension"ve BLOB sütununu düzenleyin data. dataEğer gelen kurtulmak isteyen modülü kaldırmak zorunda tefrika PHP dizidir moduleyapılandırma anahtarının.

3. Çözüm: Hızlı ve kirli çözüm

  • Modülü dosya sisteminden kaldırın.
  • Masayı kes cache_config

Ancak bu çözüm, modülün dosya sisteminde mevcut olmadığını söyleyen ve sonuçların yanlış olduğu anlamına gelen mesajlarla sonuçlanabilir. Ancak en azından bozuk modül devre dışı kalıyor ve çoğu durumda sitenize erişebiliyorsunuz.

Önbelleği Temizleme

Bazen yukarıdaki adımları uyguladıktan sonra önbelleği temizlemeniz gerekebilir. Önbelleğin nasıl temizleneceğine ilişkin bu kullanışlı belgeleri okuyun .


1
Modüllerin kaldırılması açısından bence en iyi çözüm bu.
David,

1
Bir modülü kaldırmanız gerekirse ancak modül tabloları eksik olduğu için yapamazsanız, üçüncü seçeneği kullanabilirsiniz drush eval. Örnek bir liner: 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();Çıkarılan dolar işaretini not edin, böylece komut satırı $moduleBash değişkeni olarak yanlış yorumlamaz .
sillygwailo

Tembel bir liner için şerefe! Sonunda bir teklif eksik olsa da
Matt Fletcher

Bir önbellek temizlemesi yapmanız ve ardından config komutunu dışa aktarmanız çok önemlidir, böylece config siz hazır olana kadar yeniden yüklemeyi denemez.
Adaddinsane

16

Bunu yap:

rm -rf modules/your_stubborn_module
rm -rf sites/default/files/php

Modüle bağlı olarak, config tablosundan bazı girişleri silmek zorunda kalabilirsiniz (bkz. Valli'nin cevabı) ve diğer bazı tablolar.
Turion

Bu benim için işe yaramadı.
Rooby

Kaçmalısın drush cache-rebuildde
Sky

16
  • configTabloyu elle düzenleyin name = 'core.extension've modülü serileştirilmiş bir dizi olan veri bloğundan kaldırın.
  • Ayrıca modül dizisi uzunluğunu azaltmayı unutmayın (...s:6:"module";a:HERE;{...)
  • cache_configTabloyu phpmyadmin'den veya komut satırını kullanarak kesin .

1
Teşekkürler, bu bana yardımcı oldu. Cevap " {config} tablosunu el ile düzenle " yazmalı . BLOB içeriğinden kaldırılacak metin bölümü:i:0;s:8:"name of the module";
Hendrik

2
Bu cevap, bir modülün tanımlanamadığı özel bir varlık eksik olduğu için kaldırılamadığı ya da yeniden yüklenemediği bir durumu çözmeye yardımcı oldu.
daniels

1
@ Hendrick bu sizin için işe yaramış olabilir, ancak her modülü çıkarmak için dize olarak yapılandırılmalıdır s:8:"name of the module";i:0;. @Valli'nin anlamı, modül sayısını tanımlayan dizinin, çıkarılan modüllerin sayısına göre azalması gerektiğiydi. Kurulumumdaki blobun başlangıcı a:4:{s:6:"module";a:59:{, bir 59 modül dizisidir.
İkiyi

3

Drush'u kullanmayı düşünün. Drupal 8, hala "devre dışı bırakma modüllerinin" ne olması gerektiğini tanımlamaktadır. Bir yoktur süregelen tartışma oradaki seçenek olmalıdır yoksa kaldırılması gerektiğini eğer.


Yerel olarak bir Windows PC'de geliştiriyorum ve son gördüğümde Drush Drupal 8 için hazır değildi. Tekrar bakmak zorunda kalacağım.
06’da patlamak

@bumpaw Drush, Windows üzerinde de çalışmalı. Bu en azından yerel olarak size yardımcı olacaktır. Prodüksiyon sunucularına gelince, birçok paylaşılan sunucunun size Drush veya hatta SSH sağlamadığını biliyorum ki bu da yönetimi daha zahmetli hale getiriyor. drush.org/drush_windows_installer
hampusn

Ve drush kullanarak, biri bir modülü UI işleminden farklı bir şekilde "elle nasıl kaldırır"? Soruyu cevaplamış görünmüyorsunuz.
1kenthomas

3

Drupal 8'de, modülü modül klasörünüzden kaldırmayı deneyin ve rebuild.php dosyasını çalıştırın.

İyi deneyin drush pm-uninstall module-name.


2

Diğer tüm cevapları denedim ama bir hata mesajı almaya devam ettim. Bunu çözmek için key_value tablosundan bir satır çıkarmak zorunda kaldım (isim sütununda modül adını arayın)


2

Drupal yapılandırmasıyla ilgili herhangi bir şeyi güncellemeniz gerekirse, bu durumda core.extension, Drush kullanın:

[Bu örnekte Drush 8.x]

drush cedit core.extension

1

Bunun için bir modül var. Bu modül Ağustos 2013'te drupal.org sitesinde yayınlanmıştır . Birinin ihtiyacı olursa diye.

Modülleri devre dışı bırak

Bu modül sayfasında belirtildiği gibi,

Drupal 8, birçok nedenden dolayı modülleri devre dışı bırakma özelliğini ortadan kaldırdı. Bkz. # 1199946: Devre dışı bırakılmış modüller onarımın ötesine geçmiş, bu nedenle "devre dışı bırakma" işlevselliğinin kaldırılması ve çeşitli çekirdek ve katkıda bulunan modüllerin kuyruğundaki birçok başka sorun var.

Bu modül, UI'den veya Drush'lu modülleri devre dışı bırakma (geçici olarak) özelliğini geri getiriyor. Bir modülü devre dışı bıraktıktan sonra içeriğinizin, yapılandırmanızın ve hatta sitenizin garantisi olmadığını unutmayın.


0

Bu şekilde, "better_messages" adlı bir modülü Drupal 8 örneğimden manuel olarak kaldırdım. "Better_messages" modülünü kurduğumda, site çöktü. Bu yüzden, modülü kullanıcı arayüzünden kaldırmanın bir yolu yoktu. Drush yüklü değil. Forumlarda verilen birçok ayarı yaptım, ama sonunda benim için çalıştı.

1 Modülü, modüller klasöründeki old_better_messages olarak yeniden adlandırdı.

  1. URL üzerinden http: // IP: port / foldername / rebuild.php 'yi çalıştırın . Bu o sitenin geri döndü, ancak yalnızca salt okunur modda sağladı. Yönetici aktivitelerini yapamadım veya makaleleri düzenleyemedim.

  2. Girişi veritabanından silmek için aşağıdaki komutu kullanın.

Key_value from DELETE WHERE collection = 'system.schema' AND name = 'better_messages';

Benim durumumda veri tabanına giriş yapılmamıştır. Sanırım daha önce yaptığım çeşitli gösteriler yüzünden silinmiş olabilir.

  1. Sonra DB görselleştiricisini kullanarak, önbellek ile başlayan tüm tablolardaki girdileri sildim.

Bu sorunu çözdü. Bu benim https://www.drupal.org/node/2487215 yorumuma dayanıyor


0

Jigarius'un yukarıdaki cevabı, bir nevi çalıştı ...

Yapmam gerekti: // Konfigürasyonu oku.

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

Hangi gerektiğini aynı şeyi yapın. Jigarius'un yazdığı gibi neden işe yaramadığından emin değilim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.