web-dev-qa-db-ja.com

デプロイ時に新しいモジュールの依存関係を有効にする

Drushでカスタム feature (または標準モジュール)に追加された新しい依存関係を自動的に有効にするにはどうすればよいですか?

新しいコードを取得した後、私の配置スクリプトは基本的に実行されます。

drush cc all
drush fra

しかし、新しい依存関係を追加した場合は、admin/structure/featuresページにアクセスする必要があります。そうしないと、これらのモジュールが有効になりません。どうすれば回避できますか? Drushコマンドはありますか?維持したいのでdrush en thenewmoduleを使用できません 私の配置スクリプト 汎用です。

5
gagarine

Drushキューに 機能リクエストの問題 があり、つまずきました。 donquixoteDruxプロジェクト には、必要なコマンドがあります。

drux-enable-dependencies(dep-en)-既存のモジュールの依存関係をダウンロードして有効にします。 drux-find-obsolete(obs)-引数として指定されたモジュールの直接的または間接的な依存関係ではないモジュールを検索しますdrux-generate(obs-gen)-依存関係のリストを生成します[] = ..コピーしてモジュールに貼り付けます情報ファイル。 drux-list-dependencies(dep)-drush dep-enで有効になる依存関係をリストします。 (ヘルプテキストは間違っているようです)。

そのため、当面のタスクについては、drush dep-enが処理を実行する必要があります。

ここからダウンロード できます。

更新:githubで利用可能になりました: https://github.com/donquixote/drupal-drux

代替案、パートI

Jesse Pinhoが別の回答で指摘したように、drush fr DEPENDENT_MODULEを実行することもできます。

または、drush en DEPENDENT_MODULEを実行できます。

違いは、これらのコマンドでは、依存関係が追加された「DEPENDENT_MODULE」を知っている必要があるということです。

drush dep-enを使用すると、引数なしでコマンドを実行するだけで、有効なすべてのモジュールの依存関係を確認できます。

代替案、パートII

このようなdrushコマンドを依存関係と組み合わせて使用​​する代わりに、hook_update_N()を使用して追加のモジュールを有効にすることもできます。これは、Drupal 7プロジェクトでは一般的な手法のようです。

Reubidiumによる回答を参照してください。

6
Mołot

このタスクを完全に自動化する方法はないと思います。

しかし、 Master Module を使用して、依存関係をコードに書き込むことができます。マスターは、自動展開設定でモジュール依存構成のフレームワークを提供します。

5
Nebel54

依存関係を変更したモジュールの依存関係機能だけを元に戻し、drush fraを実行することもできます。

drush fr -y [feature-module-name].dependencies && drush fra
4
Jesse Pinho

やってみてくださいdrush rqと実装hook_requirements

function MODULE_requirements($phase){
    if($phase != 'install'){
        $module_info = drupal_parse_info_file(drupal_get_path('module', 'MODULE').'/MODULE.info');
        $dependencies = $module_info['dependencies'];

        $enable = module_enable($dependencies);
        if(!$enable){
            throw new Exception('Unresolved dependencies', 1);
        }
    }

    return array();
}
0
Cinedin

この問題を解決するには、機能モジュール用のカスタム.installファイルを作成し、hook_enable()を実装します。次の行に沿って、各依存関係を有効にすることができます。

if (!module_exists('dependency')) {
  module_enable(array('dependency'));
}

このメソッドを使用して、hook_update_N()を介して新しい依存関係を有効にしました

0
reubidium

カスタムモジュールを作成し、デプロイ時に有効にするすべてのモジュールを、そのモジュールの依存関係として.infoファイルにリストできます。次に、デプロイ時にそのモジュールを有効にして、他のすべてのモジュールを有効にします。 Drupalはそれらの依存関係を処理します。モジュールが常に同じ名前である場合、_drush en custom-dependencies -y_またはそれを呼び出すものは何でも、そのモジュールの.infoファイルの内容を特定にすることができますプロジェクトごと。

既に構築されているサイトへのデプロイ時に新しいモジュールを有効にする場合は、すでに有効になっているモジュールの更新フック内にmodule_enable()を配置できます。これはDrupal 8ではなくなりますが、現在のDrupalサイトでは正常に動作します。既存のモジュールを更新した場合、XがモジュールYへの新しい依存関係、モジュールYを有効にするモジュールXの.installファイルの更新フックは問題を解決します。

0
beth