Gestion aisée des plugins avec Piston

Publié le 01/02/08 par Nicolas Jacobeus | 1 commentaire

Cela fait plusieurs billets que nous mentionnons systématiquement “Piston” lorsqu’il s’agit d’installer un plugin ou une nouvelle version de Rails. Piston est un outil qui facilite la gestion du dossier “vendor” (plugins + copie locale de rails) de votre application. Il vous permet de conserver le dossier de manière entièrement locale, tout en facilitant et automatisant les mises à jour des plugins ou de rails.

Le dossier vendor

Le dossier vendor d’une application Rails est destiné à contenir tout ce qui n’est pas développé par vous-même dans le cadre de votre application, à savoir principalement:

  • les plug-ins, réalisés par la communauté Rails, et placés dans vendor/plugins
  • une copie du code source de Rails lui-même, placée dans vendor/rails, si vous souhaitez que votre application utilise une version spécifique du framework différente des gemmes présentes dans le système.

Le problème

Le problème survient lorsque vous commencez à utiliser Subversion pour gérer le code source de votre application (c’est votre cas, n’est-ce-pas ?). En cas de mise à jour d’un plugin ou de Rails, vous souhaitez permettre à votre application de se synchroniser à la nouvelle version, mais cela implique de d’abord supprimer le dossier correspondant de votre repository SVN (svn remove), puis installer la nouvelle version dans votre copie locale, et enfin rajouter le nouveau dossier dans le repository (avec svn add). De plus, il n’y a pas de moyen aisé pour s’informer de l’apparition d’une nouvelle mise à jour.

Il y a ceci dit une alternative, fournie par SVN: utiliser la propriété svn:externals pour chaque dossier relatif à un plugin ou à Rails. Cette propriété indique à Subversion que le contenu dudit dossier n’est pas disponible dans le repository mais qu’il doit être téléchargé ailleurs (en l’occurence, dans les différents repositories correspondant aux divers plugins et à Rails).

Le problème avec cette alternative est multiple:

  • elle consomme un temps bête, puisque la synchronisation avec les repositories extérieure se fait à chaque svn update (pour chaque développeur!);
  • elle n’est pas facultative: il est donc impossible de signaler que l’on veut ignorer une mise à jour particulière, par exemple en cas d’imcompatibilité de l’application avec la nouvelle version.
  • si un des repositories externes est très lent, ou tombe en panne, vous perdez du temps ou rendez carrément votre application inutilisable.

La solution: Piston

Piston est une gemme qui se greffe sur les fonctionnalités de SVN pour combiner les avantages des deux systèmes: il vous permet de conserver en local une copie de chaque dépendance externe (plugin, Rails, ou autre), tout en rendant possible les mises à jour, uniquement si et quand vous le désirez.

Commençons par installer Piston:


$ sudo gem install piston

Il est dès lors possible, à partir de la racine de votre application, d’importer un plugin:


$ piston import http://svn.techno-weenie.net/projects/plugins/restful_authentication/ vendor/plugins/restful_authentication
Exported r3119 from 'http://svn.techno-weenie.net/projects/plugins/restful_authentication/' to 'vendor/plugins/restful_authentication'

Piston télécharge le dossier et le marque pour ajout dans le repository (svn add); il sera rajouté dans votre repository lors du prochain commit (svn commit). Vous êtes alors dans la situation d’une copie purement locale à votre repository (aucune dépendance à un repository externe), à ceci près qu’il est possible de vérifier si une mise à jour d’un dossier est disponible, au moyen de la commande piston status. Prenons par exemple le cas d’une application où l’on aurait rajouté Rails 2.0.2 et restful_authentication, ce dernier ayant une mise à jour:


$ piston status
     vendor/rails (http://svn.rubyonrails.org/rails/tags/rel_2-0-2/)
M    vendor/plugins/restful_authentication (http://svn.techno-weenie.net/projects/plugins/restful_authentication/)

Dans notre exemple, la lettre “M” placée devant le plugin restful_authentication nous indique qu’il a été mis à jour. Il est alors simple d’installer cette mise à jour:


$ piston update vendor/plugins/restful_authentication

Pour mettre à jour l’entièreté du dossier vendor, il suffit de lancer la commande piston update.

Resources

1 Commentaire

Commentaire posté par thibaut.barrere le 02/02/08

J’ajoute que Piston peut aussi être très utile lorsque l’appli Rails qu’on déploie est une application existante (ex: Mephisto, Typo…), qu’on modifie ponctuellement en local (ex: customisations diverses) et à laquelle on adjoint des plugins et des thèmes.

On peut ainsi conserver toutes ses modifications en local, et récupérer les mises à jour de plugins ou de l’application principale lorsqu’on le souhaite.

cf http://blog.logeek.fr/2008/1/4/how-to-use-piston-to-ease-your-upgrades

Thibaut

Ajouter un commentaire

Vous devez être identifié pour poster un commentaire. Identifiez-vous, ou inscrivez-vous si ce n'est déjà fait.