web-dev-qa-db-fra.com

Ruby Dépendance Gemspec: Est-il possible d'avoir une dépendance de branche git?

Est-il possible d'avoir une dépendance de branche git, à l'intérieur de mygem.gemspec?

Je pense à quelque chose de similaire à ce qui suit:

gem.add_runtime_dependency 'oauth2', :git => '[email protected]:lgs/oauth2.git'

... mais ça ne marche pas.

77
BBJ3

Ce n'est pas possible, et ne le sera probablement jamais car il serait plutôt difficile pour RubyGems de permettre aux développeurs de gemmes d'exiger que les utilisateurs disposent d'un système de contrôle de version spécifique installé pour accéder à une gemme. Les gemmes devraient être autonomes avec un nombre minimal de dépendances afin que les gens puissent les utiliser dans un éventail d'applications aussi large que possible.

Si vous voulez le faire pour vos propres projets internes, ma suggestion serait d'utiliser Bundler qui le supporte assez bien.

40
gtd

[~ # ~] modifier [~ # ~]

Selon un commentateur, ce n'est plus vrai. Informations antérieures conservées pour le contexte historique.

La duplication de la référence à une gemme dans Gemfile et .gemspec semble maintenant déclencher un message d'avertissement dans Bundler, donc cette réponse ne semble plus être vraie.

Informations obsolètes

This l'article de Yehuda Katz a dissipé une confusion similaire pour moi. Il dit que, pour une utilisation en développement uniquement, il est préférable d'ajouter les éléments git dans le gemfile, mais ce bundler utilisera toujours les informations de dépendance/version de gemspec (cela me semble magique, mais je fais confiance à Yehuda).

12
tehgeekmeister

J'essayais juste de comprendre ce problème également. Et je viens de proposer la solution suivante (que je ne sais pas si vous publiez votre gem ou si vous avez le droit de redistribuer ce gem oauth2).

Dans votre gem qui nécessite oauth2 gem exécutez ceci.

git submodule add [email protected]:lgs/oauth2.git lib/oauth2

Si vous avez besoin d'une branche différente de celle par défaut

cd lib/oauth2 && git checkout <branchname_or_ref>
cd .. && git add lib/oauth2
git commit -m "adding outh2 submodule"

Dans votre gemspec ajoutez ceci au-dessus de votre ligne de version requise

$:.Push File.expand_path('../lib/oauth2/lib', __FILE__)

Vous devrez également ajouter toutes les dépendances d'exécution de la gemme oauth2 à votre gemspec. Je n'ai pas encore trouvé de solution.

C'est ce que j'ai fait, et cela fonctionne pour nous, car notre gemme est requise via git, donc je ne sais pas si cela fonctionnerait pour une gemme publiée par rubygems.

6
kwbock