Disabilitare manualmente un modulo


39

In Drupal 7, ho potuto modificare manualmente la {system}tabella nel database per disabilitare un modulo stubbon. Nel mio sito Drupal 8, questa tabella è sparita.

Come posso disabilitare manualmente un modulo in Drupal 8?

Risposte:


34

I systemdati della tabella Drupal 7 sono ora memorizzati nella configtabella in Drupal 8 rispetto al core.extensionparametro.

Soluzione 1: aggiorna la configurazione

È possibile eseguire il codice seguente utilizzando drush evalo potrebbe utilizzare la disposizione del modulo Devel su 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();

Puoi farlo tutto in una sola riga con 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();"

Soluzione 2: modificare la tabella di configurazione se non è possibile eseguire PHP

Se il sito è rotto a causa del modulo problematico e non puoi nemmeno eseguire il codice PHP, allora puoi modificare configdirettamente la tabella.

Nella riga della configtabella in cui name = "core.extension"e modifica la colonna BLOB data. Si datatratta di un array PHP serializzato in cui è necessario rimuovere il modulo che si desidera eliminare dalla modulechiave della configurazione.

Soluzione 3: soluzione veloce e sporca

  • Rimuovere il modulo dal file system
  • Tronca la tabella cache_config

Tuttavia, questa soluzione potrebbe comportare messaggi che indicano che il modulo non esiste nel file system, il che significa che qualcosa non va. Ma almeno il modulo rotto viene disabilitato e puoi accedere al tuo sito nella maggior parte dei casi.

Svuotare la cache

A volte potrebbe essere necessario svuotare la cache dopo aver seguito i passaggi precedenti. Leggi questa pratica documentazione su come svuotare la cache .


1
In termini di disinstallazione dei moduli penso che questa sia la soluzione migliore.
David,

1
Se è necessario disinstallare un modulo ma non è possibile perché mancano le tabelle per il modulo, è possibile utilizzare la terza opzione con drush eval. Un esempio di una 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();riga è: nota il simbolo del dollaro con escape in modo che la riga di comando non venga interpretata erroneamente $modulecome una variabile Bash.
sillygwailo,

Saluti per il lazy one liner! Alla fine manca una citazione
Matt Fletcher,

È praticamente essenziale svuotare la cache e quindi esportare la configurazione in modo che la configurazione non tenti di reinstallarsi finché non si è pronti.
Adaddinsane,

16

Fai questo:

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

A seconda del modulo, potrebbe essere necessario eliminare alcune voci dalla tabella di configurazione (vedere la risposta di Valli) e alcune altre tabelle.
Turion,

Questo non ha funzionato per me.
Rooby,

Devi correre drush cache-rebuildanche tu
Sky

16
  • Modificare manualmente la configtabella in cui name = 'core.extension'e rimuovere il modulo dal BLOB di dati che è un array serializzato.
  • Fare attenzione a ridurre anche la lunghezza dell'array del modulo (...s:6:"module";a:HERE;{...)
  • Troncare la cache_configtabella da phpmyadmin o usando la riga di comando.

1
Grazie, questo mi ha aiutato. La risposta dovrebbe contenere " Modifica manualmente la tabella {config}". La parte di testo da rimuovere dal contenuto BLOB è:i:0;s:8:"name of the module";
Hendrik

2
Questa risposta ha aiutato a risolvere una situazione in cui un modulo non poteva né essere disinstallato né reinstallato perché mancava un'entità personalizzata da esso definita.
Daniels,

1
@hendrick potrebbe aver funzionato per te ma la stringa per rimuovere ogni modulo dovrebbe essere strutturata come s:8:"name of the module";i:0;. Il significato di @valli era che l'array che descriveva il numero di moduli doveva essere ridotto in numero in base alla quantità di moduli rimossi. L'inizio del BLOB nella mia configurazione è a:4:{s:6:"module";a:59:{, che è un array di 59 moduli. Se ne elimini due, modifica quel valore di array in 57.
dimmech

4

In Drupal 8, prova a rimuovere il modulo dalla cartella del modulo ed esegui rebuild.php.

Prova drush pm-uninstall module-nameanche tu.


3

Prendi in considerazione l'utilizzo di Drush. Drupal 8 sta ancora definendo quali "moduli di disabilitazione" dovrebbero essere. C'è una discussione in corso se ci dovrebbe essere quell'opzione o dovrebbe essere rimossa.


Sto sviluppando localmente su un PC Windows e l'ultima volta che ho visto Drush non era pronto per Drupal 8. Dovrò guardare di nuovo.
bumpaw,

@bumpaw Drush dovrebbe funzionare anche su Windows. Questo ti aiuterà almeno a livello locale. Quando si tratta di server di produzione, so che molti hosting condivisi non forniscono Drush o SSH, il che di solito rende la gestione molto più ingombrante. drush.org/drush_windows_installer
hampusn il

E, usando drush, come si fa a "rimuovere manualmente" un modulo in un modo diverso dal processo dell'interfaccia utente? Sembra che tu non abbia risposto alla domanda.
1kenthomas,

2

Ho provato tutte le altre risposte ma ho continuato a ricevere un messaggio di errore drupal. Per risolverlo ho dovuto rimuovere una riga dalla tabella key_value (cercare il nome del modulo nella colonna del nome)


2

Se devi aggiornare qualcosa relativo alla configurazione di Drupal, in questo caso core.extensionusa Drush:

[Drush 8.x in questo esempio]

drush cedit core.extension

1

C'è un modulo per quello. Questo modulo è stato pubblicato nell'agosto 2013 su drupal.org . Nel caso qualcuno ne abbia bisogno.

Disabilita i moduli

Come indicato nella pagina di questo modulo,

Drupal 8 ha rimosso la possibilità di disabilitare i moduli per molte ragioni. Vedi # 1199946: I moduli disabilitati sono rotti irreparabilmente, quindi la funzionalità "disabilita" deve essere rimossa e molti altri problemi nella coda di vari moduli core e forniti.

Questo modulo riporta la possibilità di disabilitare (temporaneamente) i moduli dall'interfaccia utente o con Drush. Nota che non hai alcuna garanzia per i tuoi contenuti, la tua configurazione o anche il tuo sito dopo aver disabilitato un modulo.


0

È così che ho rimosso manualmente un modulo chiamato "better_messages" dalla mia istanza di Drupal 8. Non appena ho installato il modulo "better_messages", il sito è andato in crash. Quindi non c'era modo di disinstallare il modulo dall'interfaccia utente. Non ho installato Drush. Ho fatto molte impostazioni fornite nei forum, ma è così che alla fine ha funzionato per me.

1 Rinominato il modulo in old_better_messages nella cartella dei moduli.

  1. Attraverso l'URL, ha eseguito http: // IP: port / foldername / rebuild.php . Ciò ha assicurato che il sito è tornato, ma solo in modalità di sola lettura. Non ho potuto svolgere le attività di amministrazione o modificare articoli.

  2. Utilizzato il seguente comando per eliminare la voce dal database

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

Nel mio caso, non vi era alcuna voce nel database. Penso che potrebbe essere stato eliminato a causa delle varie acrobazie che ho fatto in precedenza.

  1. Quindi, usando Visualizer DB, ho eliminato le voci da tutte le tabelle che iniziano con la cache.

Questo ha risolto il problema. Questo si basa sulla mia interpretazione di https://www.drupal.org/node/2487215


0

La risposta di Jigarius sopra, ha funzionato ...

Ho dovuto: // Leggere la configurazione.

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

Che dovrebbe fare la stessa cosa. Non sono sicuro del motivo per cui non ha funzionato come Jigarius ha scritto ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.