Deshabilitar manualmente un módulo

39

En Drupal 7, podría editar manualmente la {system}tabla en la base de datos para deshabilitar un módulo stubbon. En mi sitio Drupal 8, esta tabla se ha ido.

¿Cómo puedo desactivar manualmente un módulo en Drupal 8?

bumpaw
fuente

Respuestas:

34

Los systemdatos de la tabla Drupal 7 ahora se almacenan en la configtabla en Drupal 8 contra el core.extensionparámetro.

Solución 1: actualizar la configuración

Puede ejecutar el siguiente código usando drush evalo puede estar usando la provisión del módulo Devel para 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();

Puede hacer todo esto en una línea rápida 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();"

Solución 2: edite la tabla de configuración si no puede ejecutar PHP

Si el sitio está roto debido al módulo problemático y ni siquiera puede ejecutar el código PHP, entonces puede editar la configtabla directamente.

En la fila de la configtabla donde name = "core.extension"y edite la columna BLOB data. Se datatrata de una matriz PHP serializada donde debe eliminar el módulo del que desea deshacerse de la moduleclave de la configuración.

Solución 3: solución rápida y sucia

  • Eliminar el módulo del sistema de archivos
  • Truncar la mesa cache_config

Sin embargo, esta solución podría generar mensajes que indiquen que el módulo no existe en el sistema de archivos, lo que significa que algo está mal. Pero al menos el módulo roto se deshabilita y puede acceder a su sitio en la mayoría de los casos.

Borrar caché

A veces puede que tenga que borrar el caché después de seguir los pasos anteriores. Lea esta práctica documentación sobre cómo borrar el caché .

Jigarius
fuente
1
En términos de desinstalación de módulos, creo que esta es la mejor solución.
David
1
Si necesita desinstalar un módulo pero no puede porque faltan las tablas para el módulo, puede usar la tercera opción con drush eval. Un ejemplo de una línea es: tenga en 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();cuenta el signo de dólar escapado para que la línea de comando no se malinterprete $modulecomo una variable Bash.
sillygwailo
¡Saludos para el perezoso! Sin embargo
Matt Fletcher
Es bastante esencial que borre la memoria caché y luego exporte la configuración para que la configuración no intente volver a instalarse hasta que esté listo.
Adaddinsane
16

Hacer esto:

rm -rf modules/your_stubborn_module
rm -rf sites/default/files/php
manish_s
fuente
Dependiendo del módulo, es posible que deba eliminar algunas entradas de la tabla de configuración (consulte la respuesta de valli) y algunas otras tablas.
Turion
Esto no funcionó para mí.
rooby
Tienes que correr drush cache-rebuildtambién
Sky
16
  • Edite manualmente la configtabla donde name = 'core.extension'y elimine el módulo del blob de datos que es una matriz serializada.
  • Tenga cuidado de disminuir la longitud de la matriz del módulo también (...s:6:"module";a:HERE;{...)
  • Trunca la cache_configtabla de phpmyadmin o usando la línea de comandos.
valli
fuente
1
Gracias, esto me ayudó. La respuesta debería leer " Editar manualmente la tabla {config}". La porción de texto para eliminar del contenido BLOB es:i:0;s:8:"name of the module";
Hendrik
2
Esta respuesta ayudó a resolver una situación en la que un módulo no podía desinstalarse ni reinstalarse porque faltaba una entidad personalizada que definió.
daniels
1
@hendrick esto puede haber funcionado para usted, pero la cadena para eliminar cada módulo debe estructurarse como s:8:"name of the module";i:0;. Lo que @valli quiso decir fue que la matriz que describe el número de módulos debe disminuir en número por la cantidad de módulos eliminados. El comienzo del blob en mi configuración es a:4:{s:6:"module";a:59:{, que es una matriz de 59 módulos. Si elimina dos, cambie el valor de la matriz a 57.
dimmech
4

En Drupal 8, intente eliminar el módulo de la carpeta de su módulo y ejecute rebuild.php.

Inténtalo drush pm-uninstall module-nametambién.

DRUPWAY
fuente
3

Considera usar Drush. Drupal 8 todavía está definiendo qué deberían ser los "módulos de desactivación". Hay una discusión en curso si debería existir esa opción o si debería eliminarse.

Mołot
fuente
Estoy desarrollando localmente en una PC con Windows y la última vez que miré, Drush no estaba listo para Drupal 8. Tendré que buscar de nuevo.
bumpaw
@bumpaw Drush también debería funcionar en Windows. Eso al menos te ayudará localmente. Cuando se trata de servidores de producción, sé que muchos alojamientos compartidos no le proporcionan Drush o incluso SSH, lo que generalmente hace que la administración sea más engorrosa. drush.org/drush_windows_installer
hampusn
Y, usando drush, ¿cómo se "elimina manualmente" un módulo de una manera diferente al proceso de la interfaz de usuario? No parece haber respondido la pregunta.
1kenthomas
2

Intenté todas las otras respuestas pero seguí recibiendo un mensaje de error de drupal. Para resolverlo, tuve que eliminar una fila de la tabla key_value (busque el nombre del módulo en la columna de nombre)

diesonne
fuente
2

Si necesita actualizar algo relacionado con la configuración de Drupal, en este caso core.extension, use Drush:

[Drush 8.x en este ejemplo]

drush cedit core.extension
Jakub Mroz
fuente
1

Hay un módulo para eso. Este módulo fue publicado en agosto de 2013 en drupal.org . En caso de que alguien lo necesite.

Deshabilitar módulos

Como se indica en la página de este módulo,

Drupal 8 ha eliminado la capacidad de deshabilitar módulos por muchas razones. Consulte # 1199946: los módulos deshabilitados se rompen sin posibilidad de reparación, por lo que es necesario eliminar la funcionalidad de "deshabilitar" y muchos otros problemas en la cola de varios módulos principales y contribuidos.

Este módulo recupera la capacidad de deshabilitar (temporalmente) los módulos desde la interfaz de usuario o con Drush. Tenga en cuenta que no hay garantía para su contenido, configuración o incluso su sitio después de deshabilitar un módulo.

CodeNext
fuente
0

Así es como, manualmente eliminé un módulo llamado "better_messages" de mi instancia de Drupal 8. Tan pronto como instalé el módulo "better_messages", el sitio se cayó. Por lo tanto, no había forma de desinstalar el módulo de la interfaz de usuario. No tengo instalado Drush. He realizado muchas configuraciones en los foros, pero así es como finalmente funcionó para mí.

1 Cambió el nombre del módulo a old_better_messages en la carpeta de módulos.

  1. A través de la url, ejecutó http: // IP: port / foldername / rebuild.php . Esto aseguró que el sitio esté de regreso, pero solo en modo de solo lectura. No pude hacer las actividades administrativas o editar artículos.

  2. Se utiliza el siguiente comando para eliminar la entrada de la base de datos

ELIMINAR DE key_value WHERE colección = 'system.schema' AND name = 'better_messages';

En mi caso, no había entrada en la base de datos. Creo que podría haberse eliminado debido a las diversas acrobacias que hice antes.

  1. Luego, usando el visualizador de DB, eliminé las entradas de todas las tablas que comienzan con el caché.

Esto resolvió el problema. Esto se basa en mi interpretación de https://www.drupal.org/node/2487215

Soumya Rajiv
fuente
0

La respuesta de Jigarius arriba, más o menos funcionó ...

Tuve que: // Leer la configuración.

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

Que debería hacer lo mismo. No estoy seguro de por qué no funcionó como lo escribió Jigarius ...

usuario356540
fuente