it-swarm-eu.dev

drush updatedb pro jeden modul

Je možné provést aktualizaci jednoho modulu pomocí drush? Vidím drush updatedb který nebere název modulu jako argument a spustí všechny dostupné aktualizace. Pak je drush pm-update který také kontroluje nové soubory. dokumentace říká:

(stejné jako pm-updatecode + updatedb)

Znamená to, že když spustím drush pm-update bude k dispozici každá dostupná (novější aktualizace update_function) aktualizace? Existuje způsob, jak pouze (db) aktualizovat přesně jeden modul?

28
nonsenz

Ne, nemůžete.

Pokud chcete aktualizovat každý modul samostatně, aktualizujte pouze soubory jednoho modulu a poté spusťte aktualizovanýb.

10
Berdir

Na Drush 5.7 můžete spustit příkaz drush pm-update --no-core module-name. Drush automaticky zálohuje aktuální modul, stáhne novou verzi a vyzve vás k aktualizaci databáze.

21
ahimsauzi

Pokud chcete spustit pouze jednu aktualizaci, můžete například spustit drush eval foo_update_33(). V praxi je to trochu složitější než to, protože musíte načíst soubor .install, ale ne moc.

Můžete také vyzkoušet řešení @macaleaa:

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

8
moshe weitzman

ani drush up someproject ani drush upc someproject Zdá se, že aktualizuje pouze modul someproject. Jiný způsob, jak to, co chcete, je:

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

Zde je diskuse podobné téma na Drupal.org. Dávejte pozor!

5
myselfhimself

Používám Drush 5.9 a mohu tímto příkazem úspěšně aktualizovat jeden modul:

drush dl *project*

Například pro aktualizaci modulu 'devel':

drush up devel
4
Rod

Věřím, že je to nyní možné u Drush, pomocí up:

drush up module_name
1
zgreen

Měl jsem situaci, kdy tabulka vytvořená aktualizační funkcí (MYMODULE_update_7101), Ale ta tabulka byla přístupná v kódu někde v každé mezipaměti jasné a téměř v každém volání drush (v podstatě to bylo získání názvů typů entit) pro všechna menu a cokoli jiného). Běh drush updatedb Běžel MYMODULE_update_7101 Třetí místo první.

Vyzkoušel jsem řešení navržené @macaleaa a @moshe weitzman of running:

drush php-eval 'module_load_install('MYMODULE');MYMODULE_update_7101();'

před spuštěním drush updatedb, ale to nepomohlo - běh drush selhal, protože updatedb se pokusil znovu spustit MYMODULE_update_7101() a vyhodil, říkal, že tabulka již existuje. V zásadě výše uvedený kód provedl aktualizaci, ale nezanechal v systému značku, že aktualizace byla spuštěna. Pravděpodobně existuje spousta dalších věcí update.php, Které musíte udělat po spuštění každé aktualizace, abyste uložili nejnovější číslo verze modulu v db atd.

Prošel jsem update.php, Abych viděl, jak to vlastně spouští každou aktualizační funkci a co dělá poté, hledal jsem funkci, která by volala aktualizační funkci a také dělal všechny ostatní věci. Nakonec jsem se k tomu dostal:

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

Což jsem vlastně běžel s drush:

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

Aktualizace proběhla bez problémů, ale pak se MYMODULE verze 7101 stále objevila v seznamu aktualizací, když jsem běžel updatedb, ALTHOUGH to běžel bez chyb a všechno vypadalo dobře při kontrole webu.

Trochu drsný a 6 let zpožděný, ale všechno je v pořádku, že končí dobře?

0
nerdlinger