モジュールを手動で無効にする


39

Drupal 7では{system}、データベース内のテーブルを手動で編集して、スタブボンモジュールを無効にすることができました。私のDrupal 8サイトでは、このテーブルはなくなりました。

Drupal 8でモジュールを手動で無効にするにはどうすればよいですか?

回答:


34

Drupal 7のsystemテーブルデータはconfigcore.extensionパラメーターに対してDrupal 8 のテーブルに保存されるようになりました。

解決策1:構成を更新する

drush evalを使用して、またはDevelモジュールのプロビジョニングを使用して、次のコードを実行できます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();

これはすべて、簡単なワンライナーで行うことができます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:PHPを実行できない場合の構成テーブルの編集

問題のあるモジュールが原因でサイトが壊れていて、PHPコードを実行することさえできない場合、configテーブルを直接編集できる可能性があります。

configテーブル内の行でname = "core.extension"、BLOB列を編集しますdatadataあなたがからを取り除きたいモジュール削除する必要がシリアライズされたPHPの配列であるmodule設定のキーを。

解決策3:高速でダーティなソリューション

  • ファイルシステムからモジュールを削除する
  • テーブルを切り捨てる cache_config

ただし、このソリューションでは、モジュールがファイルシステムに存在しないというメッセージが表示され、何かが間違っていることを意味する場合があります。ただし、少なくとも破損したモジュールは無効になり、ほとんどの場合、サイトにアクセスできます。

キャッシュをクリアする

上記の手順を実行した後、キャッシュをクリアする必要がある場合があります。キャッシュをクリアする方法に関するこの便利なドキュメントをお読みください。


1
モジュールのアンインストールに関しては、これが最良のソリューションだと思います。
デビッド

1
モジュールをアンインストールする必要があるが、モジュールのテーブルが見つからないためにアンインストールできない場合は、で3番目のオプションを使用できますdrush eval。1行の例は次のとおりです。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();コマンドラインが$moduleBash変数と誤解されないように、エスケープされたドル記号に注意してください。
sillygwailo

怠zyなワンライナーに乾杯!最後に引用がありません
マットフレッチャー

キャッシュをクリアしてから、設定をエクスポートして、準備が整うまで設定が再インストールされないようにすることが非常に重要です。
アダディサン

16

これを行う:

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

モジュールによっては、設定テーブル(valliの回答を参照)およびその他のテーブルからいくつかのエントリを削除する必要がある場合があります。
チュリオン

これはうまくいきませんでした。
ルービー

あなたも走らなければならdrush cache-rebuildない
スカイ

16
  • configテーブルを手動で編集しname = 'core.extension'、シリアル化された配列であるデータBLOBからモジュールを削除します。
  • モジュール配列の長さも減らすことに注意してください (...s:6:"module";a:HERE;{...)
  • cache_configphpmyadminから、またはコマンドラインを使用してテーブルを切り捨てます。

1
おかげで、これは私を助けてくれました。答えは「手動で{config}テーブルを編集する」です。BLOBコンテンツから削除するテキスト部分は次のとおりですi:0;s:8:"name of the module";
。– Hendrik

2
この回答は、モジュールが定義したカスタムエンティティが欠落しているために、モジュールをアンインストールまたは再インストールできない状況を解決するのに役立ちました。
ダニエルズ

1
@hendrickこれはあなたのために働いたかもしれませんが、各モジュールを削除するための文字列はとして構造化されるべきs:8:"name of the module";i:0;です。@valliが意味したことは、モジュールの数を記述する配列は、削除されたモジュールの数だけ数を減らす必要があるということでした。私のセットアップでのblobの始まりは、a:4:{s:6:"module";a:59:{59個のモジュールの配列です。2つの配列を削除すると、その配列の値が57に変更されます
。– dimmech

3

Drushの使用を検討してください。Drupal 8は、「モジュールを無効にする」ことを定義しています。そのオプションがある場合、または削除する必要がある場合は、継続的な議論があります。


私はWindows PCでローカルに開発しており、前回見たDrushはDrupal 8の準備ができていませんでした。もう一度見る必要があります。
バンポー

@bumpaw DrushはWindows上でも動作するはずです。それは少なくともローカルに役立ちます。実稼働サーバーに関して言えば、多くの共有ホスティングでは通常、管理方法が面倒になるDrushやSSHさえも提供されないことを知っています。drush.org/drush_windows_installer
hampusn

そして、drushを使用して、UIプロセスとは異なる方法でモジュールをどのように「手動で削除」しますか?質問に回答していないようです。
-1kenthomas

3

Drupal 8で、モジュールをモジュールフォルダーから削除して、rebuild.phpを実行してください。

試してみてくださいdrush pm-uninstall module-name


2

他のすべての答えを試しましたが、引き続きdrupalエラーメッセージが表示されました。それを解決するには、key_valueテーブルから行を削除する必要がありました(名前列でモジュール名を探します)


2

Drupalの構成に関連する何かを更新する必要がある場合core.extension、この場合は、Drushを使用します。

[この例では8.xを消去]

drush cedit core.extension

1

そのためのモジュールがあります。このモジュールは2013年8月にdrupal.orgに投稿されました。誰かが必要な場合に。

モジュールを無効にする

このモジュールのページに記載されているように、

Drupal 8では、多くの理由でモジュールを無効にする機能が削除されました。 #1199946を参照してください:無効なモジュールは修復できないほど壊れているため、「無効」機能を削除する必要があります。また、さまざまなコアおよび提供モジュールのキューにある他の多くの問題。

このモジュールは、UIまたはDrushから(一時的に)モジュールを無効にする機能を復活させます。モジュールを無効にした後は、コンテンツ、構成、またはサイトさえ保証されないことに注意してください。


0

これは、Drupal 8インスタンスから「better_messages」という名前のモジュールを手動で削除した方法です。「better_messages」モジュールをインストールするとすぐに、サイトがダウンしました。そのため、ユーザーインターフェイスからモジュールをアンインストールする方法はありませんでした。Drushをインストールしていません。私はフォーラムで与えられた多くの設定を行いましたが、これは最終的に私のために働いた方法です。

1モジュールの名前を、modulesフォルダーのold_better_messagesに変更しました。

  1. URLを介して、http:// IP:port / foldername / rebuild.phpを実行しました。これにより、サイトは確実に復帰しますが、読み取り専用モードのみです。管理活動を行ったり、記事を編集したりできませんでした。

  2. 次のコマンドを使用して、データベースからエントリを削除します

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

私の場合、データベースにエントリはありませんでした。以前に行ったさまざまなスタントが原因で、削除された可能性があると思います。

  1. 次に、DBビジュアライザーを使用して、キャッシュで始まるすべてのテーブルからエントリを削除しました。

これで問題は解決しました。これは、https://www.drupal.org/node/2487215の私の解釈に基づいています


0

上記のジガリウスの答え、ある種の作業...

私はしなければなりませんでした://設定を読みます。

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

どの必要があり、同じことを行います。ジガリウスが書いたようになぜ機能しなかったのかは分かりません...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.