Ręcznie wyłącz moduł

39

W Drupal 7 mogłem ręcznie edytować {system}tabelę w bazie danych, aby wyłączyć moduł skrótowy. Na mojej stronie Drupal 8 ten stół zniknął.

Jak mogę ręcznie wyłączyć moduł w Drupal 8?

odłamek
źródło

Odpowiedzi:

34

Dane systemtabeli Drupal 7 są teraz przechowywane w configtabeli w Drupal 8 w odniesieniu do core.extensionparametru.

Rozwiązanie 1: Zaktualizuj konfigurację

Możesz uruchomić następujący kod, używając drush evallub możesz używać przepisu modułu Devel do 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();

Możesz to wszystko zrobić za pomocą szybkiego linku 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();"

Rozwiązanie 2: Edytuj tabelę konfiguracji, jeśli nie możesz uruchomić PHP

Jeśli witryna jest zepsuta z powodu problematycznego modułu i nie możesz nawet uruchomić kodu PHP, być może możesz edytować configtabelę bezpośrednio.

W wierszu w configtabeli gdzie name = "core.extension"i edytuj kolumnę BLOB data. dataJest odcinkach tablicy PHP, gdzie trzeba usunąć moduł, którego chcesz się pozbyć z modulekluczem konfiguracji.

Rozwiązanie 3: Szybkie i brudne rozwiązanie

  • Usuń moduł z systemu plików
  • Obetnij stół cache_config

Jednak to rozwiązanie może powodować pojawienie się komunikatów informujących, że moduł nie istnieje w systemie plików, co oznacza, że ​​coś jest nie tak. Ale przynajmniej uszkodzony moduł zostaje wyłączony i w większości przypadków można uzyskać dostęp do witryny.

Czyszczenie pamięci podręcznej

Czasami może być konieczne wyczyszczenie pamięci podręcznej po wykonaniu powyższych kroków. Przeczytaj tę przydatną dokumentację dotyczącą czyszczenia pamięci podręcznej .

Jigarius
źródło
1
Jeśli chodzi o odinstalowywanie modułów, myślę, że to najlepsze rozwiązanie.
David
1
Jeśli musisz odinstalować moduł, ale nie możesz, ponieważ brakuje tabel dla modułu, możesz użyć trzeciej opcji z drush eval. Przykładem jednowierszowym jest: 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();Zwróć uwagę na znak dolara, aby linia poleceń nie interpretowała błędnie $modulejako zmiennej Bash.
sillygwailo,
Pozdrawiam leniwego liniowca! Na końcu brakuje cytatu
Matt Fletcher,
Bardzo ważne jest wyczyszczenie pamięci podręcznej, a następnie wyeksportowanie konfiguracji, aby konfiguracja nie próbowała ponownie zainstalować, dopóki nie będziesz gotowy.
Adaddinsane
16

Zrób to:

rm -rf modules/your_stubborn_module
rm -rf sites/default/files/php
manish_s
źródło
W zależności od modułu może być konieczne usunięcie niektórych wpisów z tabeli konfiguracji (patrz odpowiedź valli) i niektórych innych tabel.
Turion
To mi nie zadziałało.
rooby
Trzeba uruchomić drush cache-rebuildzbyt
Sky
16
  • Ręcznie edytuj configtabelę gdzie name = 'core.extension'i usuń moduł z obiektu blob danych, który jest szeregową tablicą.
  • Pamiętaj również o zmniejszeniu długości tablicy modułów (...s:6:"module";a:HERE;{...)
  • Obetnij cache_configtabelę z phpmyadmin lub za pomocą wiersza polecenia.
Valli
źródło
1
Dzięki, pomogło mi to. Odpowiedź powinna brzmieć „Ręcznie edytuj tabelę {config}”. Część tekstowa do usunięcia z treści BLOB to:i:0;s:8:"name of the module";
Hendrik
2
Ta odpowiedź pomogła rozwiązać sytuację, w której moduł nie mógł zostać ani odinstalowany, ani ponownie zainstalowany, ponieważ brakowało zdefiniowanego elementu niestandardowego.
Daniels
1
@hendrick to mogło zadziałać, ale ciąg do usunięcia każdego modułu powinien mieć następującą strukturę s:8:"name of the module";i:0;. @Valli miał na myśli to, że tablica opisująca liczbę modułów powinna zostać zmniejszona pod względem liczby usuniętych modułów. Początek obiektu blob w mojej konfiguracji to a:4:{s:6:"module";a:59:{, który jest tablicą 59 modułów. Jeśli usuniesz dwa, zmień tę wartość tablicy na 57.
dimmech 10.01.18
3

Rozważ użycie Drusha. Drupal 8 wciąż określa, jakie powinny być „moduły wyłączające”. Jest trwa dyskusja , czy nie powinno być tak, że opcja lub powinno zostać usunięte.

Mołot
źródło
Pracuję lokalnie na komputerze z systemem Windows i ostatnim razem, gdy patrzyłem, Drush nie był gotowy na Drupala 8. Będę musiał jeszcze raz spojrzeć.
bumpaw
@bumpaw Drush powinien również działać w systemie Windows. To przynajmniej pomoże ci lokalnie. Jeśli chodzi o serwery produkcyjne, wiem, że wiele hostowanych hostów nie zapewnia Drush ani nawet SSH, co zwykle sprawia, że ​​zarządzanie jest bardziej kłopotliwe. drush.org/drush_windows_installer
hampusn
I używając drush, w jaki sposób można „ręcznie usunąć” moduł w sposób inny niż proces interfejsu użytkownika? Wygląda na to, że nie odpowiedziałeś na pytanie.
1kenthomas
3

W Drupal 8 spróbuj usunąć moduł z folderu modułu i uruchom rebuild.php.

Spróbuj drush pm-uninstall module-namerównież.

DRUPWAY
źródło
2

Próbowałem wszystkich innych odpowiedzi, ale ciągle pojawiał się komunikat o błędzie drupala. Aby go rozwiązać, musiałem usunąć wiersz z tabeli wartość_klucza (poszukaj nazwy modułu w kolumnie nazwy)

Diesonne
źródło
2

Jeśli potrzebujesz zaktualizować cokolwiek związanego z konfiguracją Drupala, w tym przypadku core.extensionużyj Drusha:

[Drush 8.x w tym przykładzie]

drush cedit core.extension
Jakub Mroz
źródło
1

Jest na to moduł. Ten moduł został opublikowany w sierpniu 2013 r. Na drupal.org . W razie potrzeby.

Wyłącz moduły

Jak podano na stronie tego modułu,

Drupal 8 usunął możliwość wyłączania modułów z wielu powodów. Zobacz # 1199946: Wyłączone moduły są uszkodzone nie do naprawienia, więc funkcja „wyłącz” musi zostać usunięta, a wiele innych problemów w kolejce różnych modułów podstawowych i wnoszonych.

Ten moduł przywraca możliwość (tymczasowego) wyłączenia modułów z interfejsu użytkownika lub z Drush. Pamiętaj, że po wyłączeniu modułu nie ma gwarancji na zawartość, konfigurację, a nawet witrynę.

CodeNext
źródło
0

W ten sposób ręcznie usunąłem moduł o nazwie „better_messages” z mojej instancji Drupal 8. Gdy tylko zainstalowałem moduł „better_messages”, strona się zawiesiła. Nie było więc sposobu na odinstalowanie modułu z interfejsu użytkownika. Nie mam zainstalowanego Drusha. Dokonałem wielu ustawień podanych na forach, ale tak to w końcu dla mnie zadziałało.

1 Zmień nazwę modułu na old_better_messages w folderze modułów.

  1. Przez adres URL uruchomiono http: // IP: port / nazwa_folderu / rebuild.php . Zapewniło to powrót witryny, ale tylko w trybie tylko do odczytu. Nie mogłem wykonywać czynności administracyjnych ani edytować artykułów.

  2. Użyto następującego polecenia, aby usunąć wpis z bazy danych

DELETE FROM key_value WHERE collection = 'system.schema' AND name = 'better_messages';

W moim przypadku nie było wpisu w bazie danych. Myślę, że mógł zostać usunięty z powodu różnych sztuczek, które zrobiłem wcześniej.

  1. Następnie za pomocą wizualizatora DB usunąłem wpisy ze wszystkich tabel rozpoczynających się od pamięci podręcznej.

To rozwiązało problem. Jest to oparte na mojej interpretacji https://www.drupal.org/node/2487215

Soumya Rajiv
źródło
0

Powyższa odpowiedź Jigariusa zadziałała ...

Musiałem: // Przeczytać konfigurację.

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

Co powinno zrobić to samo. Nie jestem pewien, dlaczego to nie zadziałało, jak napisał to Jigarius ...

użytkownik356540
źródło