58 votes

Forking d'une gemme pour un projet Rails

Je me suis retrouvé deux fois dans cette situation : J'installe une gemme sur mon système et je commence à l'utiliser depuis mon projet Rails. Finalement, j'ai besoin d'apporter des modifications à cette gemme. Comment dois-je procéder ?

Idéalement, j'aimerais récupérer le code source de cette gemme quelque part, comme ~/third_party/gems, travailler dessus et faire en sorte que mon projet Rails l'utilise à la place. Est-ce possible ?

Dans tous les cas, les gemmes étaient sur github, donc je les chercherais probablement sur github, les clonerais, ferais mes chances et maintiendrais ma propre branche. Je suppose qu'ensuite j'installerais cette branche directement avec gem install sur mon serveur. Est-ce que cela a un sens ?

101voto

Pablo Points 44881

Aujourd'hui, c'est assez facile à faire avec Bundler. Vous faites une copie locale de la gemme et ensuite, au lieu de faire

gem "whatever"

dans votre Gemfile, vous le faites :

gem "whatever", :path => "/home/pupeno/whatever"

Après avoir exécuté bundle install, la gemme est prise dans ce répertoire. Même si vous modifiez quelque chose dans ce répertoire, tout ce que vous avez à faire pour le recharger est de redémarrer Rails.

Si vous devez déployer une application en utilisant vos propres modifications d'un Gem, vous faites un fork, sur Github ou similaire et sur le Gemfile que vous faites :

gem "whatever", :git => "git@github.com:/pupeno/whatever.git"

et c'est tout. C'est simple, direct et beau.

4voto

Chris Points 995

Dans tous les cas, les gemmes se trouvaient sur github, donc j'aurais probablement cherché sur github, cloné, fait mes chances et maintenu ma propre branche. Je suppose qu'ensuite j'installerais cette branche directement avec gem install sur mon serveur.

Si vous avez vraiment besoin de pirater la source réelle de la gemme, alors oui, ce serait la façon de le faire. Cependant, cela devrait être un dernier recours. Vous ne voulez pas maintenir la gemme actuelle si vous ne devez pas le faire. Pourquoi ne pas étendre les classes de la source de la gemme dont vous devez modifier la fonctionnalité et utiliser vos classes au lieu de celles de la gemme dans votre code Rails ?

Je trouve qu'il est rare que vous ayez besoin de pirater directement le code d'une tierce partie pour faire ce dont vous avez besoin. Un bon logiciel peut être étendu/facilement augmenté.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X