Desativar manualmente um módulo

39

No Drupal 7, eu poderia editar manualmente a {system}tabela no banco de dados para desativar um módulo stubbon. No meu site Drupal 8, essa tabela se foi.

Como posso desativar manualmente um módulo no Drupal 8?

bumpaw
fonte

Respostas:

34

Os systemdados da tabela Drupal 7 agora são armazenados na configtabela no Drupal 8 no core.extensionparâmetro.

Solução 1: atualizar configuração

Você pode executar o código a seguir usando drush evalou pode estar usando a provisão do 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();

Você pode fazer isso tudo de uma só vez com um 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();"

Solução 2: edite a tabela de configuração se você não puder executar o PHP

Se o site estiver com problemas por causa do módulo problemático e você nem conseguir executar o código PHP, poderá editar a configtabela diretamente.

Na linha da configtabela em que name = "core.extension"e edite a coluna BLOB data. O dataé um array PHP serializado em que é necessário remover o módulo do qual você deseja se livrar da modulechave da configuração.

Solução 3: Solução rápida e suja

  • Remova o módulo do sistema de arquivos
  • Truncar a tabela cache_config

No entanto, essa solução pode resultar em mensagens informando que o módulo não existe no sistema de arquivos, o que significa que algo está errado. Mas pelo menos o módulo quebrado é desativado e você pode acessar o site na maioria dos casos.

Limpando o cache

Às vezes, você pode precisar limpar o cache depois de seguir as etapas acima. Leia esta documentação útil sobre como limpar o cache .

Jigarius
fonte
11
Em termos de desinstalação de módulos, acho que essa é a melhor solução.
David
11
Se você precisar desinstalar um módulo, mas não puder, porque as tabelas do módulo estão ausentes, use a terceira opção com drush eval. Um exemplo de uma linha é: 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();Observe o sinal de dólar escapado para que a linha de comando não interprete mal $modulecomo uma variável Bash.
sillygwailo
Felicidades para o forro preguiçoso! Faltando uma citação no final embora
Matt Fletcher
É praticamente essencial que você limpe o cache e exporte a configuração para que ela não tente reinstalar até que esteja pronto.
Adaddinsane 23/08/18
16

Fazem isto:

rm -rf modules/your_stubborn_module
rm -rf sites/default/files/php
manish_s
fonte
Dependendo do módulo, talvez seja necessário excluir algumas entradas da tabela de configuração (consulte a resposta da valli) e algumas outras tabelas.
precisa
Isso não funcionou para mim.
ROOBY
Você tem que correr drush cache-rebuildtambém #
262/12 Sky
16
  • Edite manualmente a configtabela onde name = 'core.extension'e remova o módulo do blob de dados que é uma matriz serializada.
  • Lembre-se de diminuir também o comprimento da matriz do módulo (...s:6:"module";a:HERE;{...)
  • Trunque a cache_configtabela do phpmyadmin ou use a linha de comando.
Valli
fonte
11
Obrigado, isso me ajudou. A resposta deve ser " Edite manualmente a tabela {config}". A parte do texto a ser removida do conteúdo do BLOB é:i:0;s:8:"name of the module";
Hendrik
2
Esta resposta ajudou a resolver uma situação em que um módulo não pôde ser desinstalado nem reinstalado porque estava faltando uma entidade personalizada definida.
Daniels
11
@ Hendrick isso pode ter funcionado para você, mas a string para remover cada módulo deve ser estruturada como s:8:"name of the module";i:0;. O que @valli significava era que a matriz que descreve o número de módulos deve ser diminuída em número pela quantidade de módulos removidos. O início do blob na minha configuração é a:4:{s:6:"module";a:59:{, que é uma matriz de 59 módulos. Se você excluir duas mudanças que o valor matriz para 57.
dimmech
3

Considere usar Drush. O Drupal 8 ainda está definindo o que "módulos desativadores" devem ser. Há uma discussão em andamento se deve haver essa opção ou ela deve ser removida.

Mołot
fonte
Estou desenvolvendo localmente em um PC com Windows e da última vez que olhei o Drush não estava pronto para o Drupal 8. Terei que procurar novamente.
Bumpaw 15/05
O @bumpaw Drush também deve funcionar no Windows. Isso pelo menos o ajudará localmente. Quando se trata de servidores de produção, eu sei que muitos hosts compartilhados não fornecem Drush ou SSH, o que geralmente torna o gerenciamento muito mais complicado. drush.org/drush_windows_installer
hampusn
E, usando o drush, como "remover manualmente" um módulo de uma maneira diferente do processo da interface do usuário? Parece que você não respondeu à pergunta.
1kenthomas
3

No Drupal 8, tente remover o módulo da pasta do módulo e execute rebuild.php.

Tente drush pm-uninstall module-nametambém.

DRUPWAY
fonte
2

Tentei todas as outras respostas, mas continuava recebendo uma mensagem de erro drupal. Para resolvê-lo, tive que remover uma linha da tabela key_value (procure o nome do módulo na coluna name)

diesonne
fonte
2

Se você precisar atualizar algo relacionado à configuração do Drupal, neste caso core.extension, use Drush:

[Drush 8.x neste exemplo]

drush cedit core.extension
Jakub Mroz
fonte
1

Existe um módulo para isso. Este módulo foi publicado em agosto de 2013 em drupal.org . Caso alguém precise.

Desativar módulos

Conforme indicado na página deste módulo,

O Drupal 8 removeu a capacidade de desativar os módulos por vários motivos. Consulte o n.º 1199946: Os módulos desativados estão quebrados além do reparo, portanto, a funcionalidade "desativar" precisa ser removida e muitos outros problemas na fila de vários módulos principais e contribuídos.

Este módulo traz de volta a capacidade de (temporariamente) desativar os módulos da interface do usuário ou com o Drush. Observe que não há garantia para o seu conteúdo, configuração ou até mesmo o seu site depois de desativar um módulo.

CodeNext
fonte
0

Foi assim que eu removi manualmente um módulo chamado "better_messages" da minha instância do Drupal 8. Assim que instalei o módulo "better_messages", o site caiu no ar. Portanto, não havia como desinstalar o módulo da interface do usuário. Eu não tenho Drush instalado. Fiz muitas configurações nos fóruns, mas foi assim que finalmente funcionou para mim.

1 Renomeie o módulo para old_better_messages na pasta modules.

  1. Por meio do URL, execute http: // IP: port / foldername / rebuild.php . Isso garantiu que o site voltasse, mas apenas no modo somente leitura. Não pude fazer as atividades administrativas ou editar artigos.

  2. Utilizado após o comando para excluir a entrada do banco de dados

DELETE FROM key_value WHERE coleção = 'system.schema' AND name = 'better_messages';

No meu caso, não houve entrada no banco de dados. Eu acho que pode ter sido excluído por causa das várias cenas de ação que eu fiz anteriormente.

  1. Em seguida, usando o visualizador de banco de dados, excluí as entradas de todas as tabelas que começam com o cache.

Isso resolveu o problema. Isso é baseado na minha interpretação de https://www.drupal.org/node/2487215

Soumya Rajiv
fonte
0

A resposta de Jigarius acima, meio que funcionou ...

Eu tive que: // Ler a configuração.

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

O que deve fazer a mesma coisa. Não sei por que não funcionou como Jigarius escreveu ...

user356540
fonte