Est-il possible d'effectuer la fonction de mise à jour d'un seul module via drush? Je vois drush updatedb
qui ne prend pas de nom de module comme argument et exécute toutes les mises à jour disponibles. Ensuite il y a drush pm-update
qui vérifie également les nouveaux fichiers. le documentation dit:
(identique à pm-updatecode + updatedb)
Est-ce à dire si je lance drush pm-update
toutes les mises à jour disponibles (sorties de mise à jour plus récentes) seront-elles effectuées? Existe-t-il un moyen de (db) mettre à jour exactement un module?
Non, tu ne peux pas.
Si vous souhaitez mettre à jour chaque module individuellement, mettez à jour uniquement les fichiers d'un seul module, puis exécutez updatedb.
Sur Drush 5.7, vous pouvez exécuter la commande drush pm-update --no-core module-name
. Drush sauvegarde automatiquement le module actuel, télécharge la nouvelle version et vous invite à mettre à jour la base de données.
Si vous souhaitez exécuter une seule mise à jour, vous pouvez exécuter drush eval foo_update_33()
, par exemple. En pratique, c'est un peu plus complexe que cela car il faut charger le fichier .install mais pas beaucoup.
Vous pouvez également essayer la solution @macaleaa:
drush php-eval 'module_load_install('my_module');my_module_update_7XXX();'
ni drush up someproject
, ni drush upc someproject
semble ne mettre à jour que le module someproject
. Une manière différente de ce que vous voulez est:
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
Voici une discussion sur un sujet similaire sur Drupal.org. Attention!
J'utilise Drush 5.9, et je peux mettre à jour un seul module avec succès avec cette commande:
drush dl *project*
Ainsi, par exemple, pour mettre à jour le module 'devel':
drush up devel
Je pense que c'est désormais possible avec Drush, en utilisant up
:
drush up module_name
J'ai eu une situation dans laquelle une table créée par une fonction de mise à jour (MYMODULE_update_7101
), Mais cette table était accessible en code quelque part dans chaque cache vide et presque chaque appel drush (il obtenait essentiellement les noms des types d'entités pour tous les menus et autres). L'exécution de drush updatedb
Exécutait MYMODULE_update_7101
Troisième au lieu de premier.
J'ai essayé la solution suggérée par @macaleaa et @moshe weitzman de courir:
drush php-eval 'module_load_install('MYMODULE');MYMODULE_update_7101();'
avant d'exécuter drush updatedb
, mais cela n'a pas aidé - l'exécution drush a échoué car updatedb
a de nouveau tenté d'exécuter MYMODULE_update_7101()
et s'est trompé, disant que la table existait déjà. Fondamentalement, le code ci-dessus avait exécuté la mise à jour, mais n'avait pas laissé sa marque sur le système que la mise à jour avait été exécutée. Vraisemblablement, il y a un tas d'autres choses que update.php
Doit faire après avoir exécuté chaque mise à jour pour stocker le dernier numéro de version du module dans la base de données, etc.
J'ai parcouru update.php
Pour voir comment il exécute réellement chaque fonction de mise à jour et ce qu'il fait après, à la recherche d'une fonction à appeler qui appellerait la fonction de mise à jour et ferait toutes les autres choses. J'ai fini par y arriver:
include_once DRUPAL_ROOT . "/includes/update.inc";
$c["results"]["#abort"] = array();
update_do_one("MYMODULE", 7101, array(), $c);
Ce que j'ai couru avec drush:
drush eval 'include_once DRUPAL_ROOT . "/includes/update.inc"; $c["results"]["#abort"] = array(); update_do_one("MYMODULE", 7101, array(), $c);'
Il a exécuté la mise à jour, pas de problème, mais la version 7101 de MYMODULE est toujours apparue dans la liste des mises à jour lorsque j'ai exécuté updatedb
, bien qu'il ait fonctionné sans erreur et que tout semblait bien lors de l'inspection du site.
Un peu hacky et 6 ans de retard, mais tout va bien qui se termine bien?