web-dev-qa-db-ja.com

単一モジュールのdrush updatedb

Drushを介して単一モジュールの更新機能を実行することは可能ですか?私は見えます drush updatedbは、モジュール名を引数としてとらず、使用可能なすべての更新を実行します。次にdrush pm-update wichは新しいファイルもチェックします。 ドキュメント は言う:

(pm-updatecode + updatedbと同じ)

これは、私がdrush pm-updateすべての利用可能な(新しいupdate_functionが終了する)更新が実行されますか?正確に1つのモジュールのみを(db)更新する方法はありますか?

28
nonsenz

いいえ、できません。

各モジュールを個別に更新する場合は、単一のモジュールのファイルのみを更新してから、updatedbを実行します。

10
Berdir

Drush 5.7では、コマンドdrush pm-update --no-core module-name。 Drushは現在のモジュールを自動的にバックアップし、新しいバージョンをダウンロードして、データベースの更新を促します。

22
ahimsauzi

更新を1つだけ実行する場合は、たとえばdrush eval foo_update_33()を実行できます。実際には、.installファイルをロードする必要があるため、それよりも少し複雑です。

@macaleaaソリューションを試すこともできます:

drush php-eval 'module_load_install('my_module');my_module_update_7XXX();'

8
moshe weitzman

どちらもdrush up someproject、またはdrush upc someprojectsomeprojectモジュールのみを更新しているようです。あなたが望むものへの別の方法は、

drush dl someproject #use --select option to be prompted for a module version
                     #this will overwrite your exising module's files
                     #backup your modules files with --backup, yourself, use a VCS to revert
drush updb           #run available database update scripts

これはDrupal.orgの同様のトピックの議論です 注意してください!

5
myselfhimself

私はDrush 5.9を使用しており、次のコマンドで単一のモジュールを正常に更新できます。

drush dl *project*

したがって、たとえば、「devel」モジュールを更新するには:

drush up devel
4
Rod

これはDrushでupを使用することで可能になったと思います。

drush up module_name
1
zgreen

テーブルが更新関数(_MYMODULE_update_7101_)によって作成された状況がありましたが、そのテーブルは、すべてのキャッシュクリアおよびほぼすべてのDrush呼び出しのどこかでコードでアクセスされていました(基本的にエンティティタイプの名前を取得していました)すべてのメニューとその他すべて)。 _drush updatedb_を実行すると、最初ではなく_MYMODULE_update_7101_が3番目に実行されていました。

私は@macaleaaと@moshe weitzmanが提案する実行の解決策を試しました:

_drush php-eval 'module_load_install('MYMODULE');MYMODULE_update_7101();'
_

_drush updatedb_を実行する前に、これは役に立たなかった-updatedbMYMODULE_update_7101()を再度実行しようとしてエラーが発生したため、drushの実行は失敗し、テーブルはすでに存在すると述べた。基本的に、上記のコードは更新を実行しましたが、更新が実行されたというマークをシステムに残しませんでした。おそらく、各更新を実行した後に_update.php_がモジュールの最新バージョン番号をdbなどに格納するために実行しなければならない他の要素がたくさんあるでしょう。

_update.php_を実際に実行して、各更新関数を実行する方法とその後の動作を確認し、更新関数を呼び出し、その他すべての処理を実行する関数を探しました。私はこれに到達しました:

_include_once DRUPAL_ROOT . "/includes/update.inc";
$c["results"]["#abort"] = array();
update_do_one("MYMODULE", 7101, array(), $c);
_

私が実際にdrushで実行したもの:

_drush eval 'include_once DRUPAL_ROOT . "/includes/update.inc"; $c["results"]["#abort"] = array(); update_do_one("MYMODULE", 7101, array(), $c);'
_

更新は問題なく実行されましたが、updatedbを実行すると、MYMODULEバージョン7101が更新リストに表示されたままで、エラーが発生することなく実行され、サイトの検査ですべてが問題なく見えました。

少しハックで6年遅れですが、すべてうまくいきますか?

0
nerdlinger