Drupal 7 でインストール済みのモジュールを別ディレクトリに移動する方法
Drupal 7 でインストール済のモジュールを他のディレクトリに移動する方法について。
Drupal のモジュールの場所は DB のレコードに登録されるので、無理やり移動するとサイトが次のようなエラーを吐いて動かなくなることがあります。
Fatal error: require_once(): Failed opening required '( Drupal のルートのパス )/sites/all/modules/contrib/admin_views/plugins/views_plugin_display_system.inc' (include_path='...') in ( Drupal のルートのパス )/includes/bootstrap.inc
解決方法は大きく 2 つあります。
- モジュールをアンインストールする
- Registry Rebuild を使う
1 の方法は、モジュールをいったんアンインストールした後でディレクトリを移動し改めてインストールし直すというものです。 メリットはシンプルでわかりやすい点ですが、デメリットとしてモジュールが生成する DB テーブルや設定などがいったんすべて消えてしまうという点があります。 1 の方法がどうしても使えない場合には次の 2 の方法を利用する必要があります。
2 の方法は Registry Rebuild というプロジェクト( Drush コマンド + スクリプトファイル)を利用するというものです。 こちらの方法だと、モジュールをいったんアンインストールして設定を再度行う手間を取る必要がありません。 以下 2 の方法について手短に手順をご紹介します。
Registry Rebuild を使ってモジュールを移動する方法
1. Registry Rebuild をインストール
$ drush dl registy_rebuild
$ drush cc all
2. モジュールを移動
$ # たとえば Rules モジュールを modules ディレクトリ直下から contrib サブディレクトリ以下に移動する
$ mv sites/all/modules/rules sites/all/modules/contrib
3. Registry Rebuild とキャッシュクリアを実行
$ drush registry-rebuild # drush rr でも OK
$ drush cc all
4. サイトを確認
移動したモジュールも問題なく利用できることを確認します。
確認を徹底したい場合は Drupal が利用する DB テーブルのうち system
という名前のテーブルを確認するとよいでしょう。
$ # mysql の場合
$ `drush sql-connect` -e 'select name, filename, status from system where name="rules"'
問題なく移動できている場合は以下のような出力が出てくるはずです。
+-------+----------------------------------------------+--------+
| name | filename | status |
+-------+----------------------------------------------+--------+
| rules | sites/all/modules/contrib/rules/rules.module | 1 |
+-------+----------------------------------------------+--------+