Comment installer gem depuis la source GitHub?

451

Je voudrais installer gem à partir de la dernière source GitHub.

Comment puis-je faire cela?

Vojto
la source

Réponses:

332

Dans le cas où vous utilisez bundler, vous devez ajouter quelque chose comme ça à votre Gemfile:

gem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git'

Et dans le cas où il y a un .gemspecfichier, il devrait pouvoir récupérer et installer la gemme lors de l'exécution bundle install.

UPD. Comme indiqué dans les commentaires, pour que Bundler fonctionne correctement, vous devez également ajouter les éléments suivants config.ru:

require "bundler" 
Bundler.setup(:default)
Misha Reyzlin
la source
9
J'ai également dû ajouter ce qui suit (ajouté à mon config.ru): require "bundler" Bundler.setup(:default)Voir les documents du bundler pour plus de détails
Louis Sayers
40
De plus, on peut spécifier des options ref, branch ou tag par exemplegem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git', :branch => 'yourbranch'
Amit Patel
25
il y a aussi: gem 'redcarpet', github: 'tanoku/redcarpet'. akash.im/2012/06/05/bundler-new-github-option.html
Andrew
@AmitPatel Merci tellement tellement !!! : branch => 'yourbranch', votre ligne a résolu un gros problème pour moi tout à l'heure. Merci beaucoup à vous.
KM Rakibul Islam du
3
@gaussblurinc gem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git', :tag => 'v2.3.5'<- la :tag => ''partie
Misha Reyzlin
400

eh bien, cela dépend du projet en question. Certains projets ont un fichier * .gemspec dans leur répertoire racine. Dans ce cas, il serait

gem build GEMNAME.gemspec
gem install gemname-version.gem

D'autres projets ont une tâche de rake, appelée "gem" ou "build" ou quelque chose comme ça, dans ce cas, vous devez invoquer "rake", mais cela dépend du projet.

Dans les deux cas, vous devez télécharger la source.

Dominik Honnef
la source
2
Merci - réponse parfaite.
Jon Schoning
20
Juste une astuce pour faire savoir aux gens ce qui se passe réellement. Le gemname-version.gemfichier est créé lors de l'appelgem build
Waiting for Dev ...
Où la gem install gemname-version.gemcommande installe-t-elle le git gem localement? Je ne trouve nulle part dans ma machine locale une gemme de moteur installée de cette façon. Où bundler le cache-t-il?
Vert
2
Je pense que la gem install gemname-version.gemligne devrait êtregem install --local gemname-version.gem
JonB
@Green - gem which gemnamedevrait vous dire où se trouve un bijou spécifique, cela ne fonctionne-t-il pas pour vous?
même
255

Essayez la gemme specific_install qui vous permet d'installer une gemme depuis son dépôt github (comme 'edge'), ou depuis une URL arbitraire. Très utile pour forger des gemmes et les pirater sur plusieurs machines et autres.

gem install specific_install
gem specific_install -l <url to a github gem>

par exemple

gem specific_install https://github.com/githubsvnclone/rdoc.git 
Kamek
la source
3
pourriez-vous ajouter plus d'explications sur la specific_installgemme?
microspino
1
C'est exactement ce que je cherchais, similaire au support pip git de Python. gem specific_install -l <url pour projeter sur github> a fonctionné comme un charme!
Murph
1
ERROR: While executing gem ... (NoMethodError) undefined method 'build' for Gem::Package:Module Cela semble très cool, mais je ne vais pas approfondir les choses. Je voulais juste signaler que cela n'a pas fonctionné pour moi au cas où quelqu'un d'autre serait sur le point de lui faire un tourbillon basé sur la recommandation de SO.
isomorphismes
1
@isomorphismes +1 à votre commentaire. J'ai créé une question distincte sur cette erreur ici: stackoverflow.com/questions/27045874/…
La-comadreja
1
C'est une bouée de sauvetage! Merci Monsieur.
Noldorin
34

Bundler vous permet d'utiliser des gemmes directement à partir des référentiels git. Dans votre Gemfile:

# Use the http(s), ssh, or git protocol
gem 'foo', git: 'https://github.com/dideler/foo.git'
gem 'foo', git: '[email protected]:dideler/foo.git'
gem 'foo', git: 'git://github.com/dideler/foo.git'

# Specify a tag, ref, or branch to use
gem 'foo', git: '[email protected]:dideler/foo.git', tag: 'v2.1.0'
gem 'foo', git: '[email protected]:dideler/foo.git', ref: '4aded'
gem 'foo', git: '[email protected]:dideler/foo.git', branch: 'development'

# Shorthand for public repos on GitHub (supports all the :git options)
gem 'foo', github: 'dideler/foo'

Pour plus d'informations, voir https://bundler.io/v2.0/guides/git.html

Dennis
la source
probablement la meilleure réponse
Anton Semenichenko
Veuillez noter que vous pourriez avoir des problèmes si vous utilisez cette approche avec passager et apache / ngix. Lors de l'exécution bundle, ces dépendances git-gem ne seront pas installées globalement mais dans le répertoire personnel de l'utilisateur actuel. Passenger exécutera ruby ​​en tant qu'utilisateur de votre serveur web (par exemple www-data) qui n'a pas accès à ce répertoire et donc ce "git-gem" ne sera pas chargé. Vous obtiendrez une erreur ... is not yet checked out. Run bundle install first.
fishbone
16

OBSOLETE (voir commentaires)

Si le projet provient de github et qu'il est contenu dans la liste sur http://gems.github.com/list.html , vous pouvez simplement ajouter le dépôt github aux sources de gems pour l'installer:

$ gem sources -a http://gems.github.com
$ sudo gem install username-projectname
Michael Pereira
la source
1
o rly? je viens de le faire et cela a fonctionné ... allez sur gems.github.com avant de l'ajouter aux sources de votre année, je suppose? (mais n'utilisez pas sudo)
esharp
7
@esharp, ils hébergent ceux qu'ils ont construits, mais ils ne les construisent plus. Si la gemme a été mise à jour depuis 2009 , une copie de gems.github.com sera obsolète.
Tobu
13

Si vous obtenez vos gemmes à partir d'un référentiel GitHub public, vous pouvez utiliser le raccourci

gem 'nokogiri', github: 'tenderlove/nokogiri'
Rajeev Kannav Sharma
la source
4

Vous pouvez aussi faire gem install username-projectname -s http://gems.github.com

Chuck Vose
la source
6
Obsolète, voir les commentaires de l'autre réponse.
Lee Hambley
1
Toujours m'a aidé pour un problème avec une ancienne base de code. Oui c'est 2013 et je travaille sur un projet de rails 2.3.4.
Vivek Sampara
4

Dans votre Gemfile, ajoutez ce qui suit:

gem 'example', :git => 'git://github.com/example.git'

Vous pouvez également ajouter des options ref, branch et tag,

Par exemple, si vous souhaitez télécharger à partir d'une branche particulière:

gem 'example', :git => "git://github.com/example.git", :branch => "my-branch"

Exécutez ensuite:

bundle install
slal
la source
3

Si vous installez à l'aide de bundler comme suggéré par gryzzly et que la gemme crée un binaire, assurez-vous de l'exécuter avec bundle exec mygembinarycar la gemme est stockée dans un répertoire bundler qui n'est pas visible sur le chemin normal de la gemme.

Mark Cheverton
la source
2

Sur une nouvelle machine Linux, vous devez également installer git. Bundle l'utilise dans les coulisses.

user1208639
la source