Drushを介して単一モジュールの更新機能を実行することは可能ですか?私は見えます drush updatedb
は、モジュール名を引数としてとらず、使用可能なすべての更新を実行します。次にdrush pm-update
wichは新しいファイルもチェックします。 ドキュメント は言う:
(pm-updatecode + updatedbと同じ)
これは、私がdrush pm-update
すべての利用可能な(新しいupdate_functionが終了する)更新が実行されますか?正確に1つのモジュールのみを(db)更新する方法はありますか?
いいえ、できません。
各モジュールを個別に更新する場合は、単一のモジュールのファイルのみを更新してから、updatedbを実行します。
Drush 5.7では、コマンドdrush pm-update --no-core module-name
。 Drushは現在のモジュールを自動的にバックアップし、新しいバージョンをダウンロードして、データベースの更新を促します。
更新を1つだけ実行する場合は、たとえばdrush eval foo_update_33()
を実行できます。実際には、.installファイルをロードする必要があるため、それよりも少し複雑です。
@macaleaaソリューションを試すこともできます:
drush php-eval 'module_load_install('my_module');my_module_update_7XXX();'
どちらもdrush up someproject
、またはdrush upc someproject
はsomeproject
モジュールのみを更新しているようです。あなたが望むものへの別の方法は、
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の同様のトピックの議論です 注意してください!
私はDrush 5.9を使用しており、次のコマンドで単一のモジュールを正常に更新できます。
drush dl *project*
したがって、たとえば、「devel」モジュールを更新するには:
drush up devel
これはDrushでup
を使用することで可能になったと思います。
drush up module_name
テーブルが更新関数(_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
_を実行する前に、これは役に立たなかった-updatedb
がMYMODULE_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年遅れですが、すべてうまくいきますか?