2010-12-20 4 views

Répondre

442

Je crois que vous pouvez le faire:

gem "foo", :path => "/path/to/foo" 
+8

Un chemin codé en dur convient à une session de hack rapide, mais la solution gem local de bloudermilk est plus efficace pour les projets sous contrôle de version. Il vous permet de continuer à vérifier dans les deux projets - gem et projet en utilisant la gemme - de sorte que les autres peuvent ne pas avoir à vérifier la source gem ou partager les mêmes chemins. – mahemoff

+3

Vous pouvez le rendre légèrement plus propre en utilisant un lien symbolique .gitignored vers votre gem local dans votre répertoire de projet - de cette façon, vous pouvez utiliser le contrôle de source sur les deux projets séparément et d'autres peuvent faire la même chose. – Dan

+4

Quelque chose à surveiller pourrait être le printemps. Si vous utilisez un chemin local pour votre gemme, vous pouvez remarquer des versions en cache de votre gem locale comme je l'ai fait dans la console rails. S'il ne semble pas que vos changements locaux de gemme soient ramassés, essayez '' spring stop'' pour voir si c'est vraiment le problème. –

192

En plus de spécifier le chemin (comme Jimmy mentionné), vous pouvez également forcer Bundler à utiliser un petit bijou locale pour votre environnement que en utilisant la configuration suivante Option:

$ bundle config local.GEM_NAME /path/to/local/git/repository 

Cela est extrêmement utile si vous développez deux pierres précieuses ou un bijou et un rails côte à côte app.

Notez cependant que cela ne fonctionne que lorsque vous utilisez déjà git pour votre dépendance, par exemple:

# In Gemfile 
gem 'rack', :github => 'rack/rack', :branch => 'master' 

# In your terminal 
$ bundle config local.rack ~/Work/git/rack 

Comme on le voit sur the docs.

+0

J'ai des problèmes avec ceci parce que j'utilise 'BUNDLE_PATH' (construire un paquet pour la distribution). Lorsque vous faites ce que vous avez suggéré, ou la réponse de Jimmy, il ne fait que «utiliser», et ne pas installer réellement dans mon dossier 'BUNDLE_PATH'. Je n'étais pas capable de comprendre cela, aucune aide? – Automatico

+2

Notez que cela ne fonctionnera pas avec un ** gemspec **, par discussion [ici] (https://github.com/bundler/bundler/issues/2911). – dukedave

+20

Pour désactiver le remplacement local: 'bundle config --delete local.GEM_NAME' – alxndr

25

Vous pouvez également référencer une gem locale avec git si vous travaillez dessus.

gem 'foo', 
    :git => '/Path/to/local/git/repo', 
    :branch => 'my-feature-branch' 

Ensuite, si elle change je cours

bundle exec gem uninstall foo 
bundle update foo 

Mais je ne suis pas sûr que tout le monde a besoin d'exécuter ces deux étapes.

+0

c'est génial, mais ce n'est pas pratique si vous développez activement la gemme ... parce que vous aurez besoin de commettre chaque changement & ' bundle uninstall && bundle install ', pour chaque changement que vous voulez répercuter sur votre application – Ramses

15

Pour utiliser dépôt gem local dans un projet Rails, suivez les étapes ci-dessous:

  1. Vérifiez si votre dossier de pierres précieuses est un dépôt git (la commande est exécutée dans le dossier de pierres précieuses)

    git rev-parse --is-inside-work-tree 
    
  2. Obtenir chemin du référentiel (la commande est exécutée dans le dossier de gemme)

    git rev-parse --show-toplevel 
    
  3. Mise en place d'une application dérogation locale pour le rails

    bundle config local.GEM_NAME /path/to/local/git/repository 
    

    GEM_NAME est le nom de votre bijou et /path/to/local/git/repository est la sortie de la commande au point 2

  4. Dans votre application Gemfile ajoutez la ligne suivante :

    gem 'GEM_NAME', :github => 'GEM_NAME/GEM_NAME', :branch => 'master' 
    
  5. Courir bundle install devrait donner quelque chose comme ceci:

    Using GEM_NAME (0.0.1) from git://github.com/GEM_NAME/GEM_NAME.git (at /path/to/local/git/repository) 
    

    GEM_NAME est le nom de votre bijou et /path/to/local/git/repository du point 2

  6. Enfin, exécutez bundle list, pas gem list et vous devriez voir quelque chose comme ceci:

    GEM_NAME (0.0.1 5a68b88) 
    

    GEM_NAME est le nom de votre gemme


Quelques cas importants j'observe en utilisant:

Rails 4.0.2 
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] 
Ubuntu 13.10 
RubyMine 6.0.3 
  • Il semble RubyMine ne montre pas les pierres précieuses locales comme une bibliothèque externe. Plus d'informations sur le bug se trouve here et here
  • Quand je change quelque chose dans la pierre locale, afin d'être chargé dans l'application rails je stop/start le serveur rails
  • Si je change la version de la gemme, stopping/starting le serveur Rails me donne une erreur. Pour résoudre ce problème, je spécifie la version de pierres précieuses dans l'application rails Gemfile comme ceci:

    gem 'GEM_NAME', '0.0.2', :github => 'GEM_NAME/GEM_NAME', :branch => 'master' 
    
-2

Si vous voulez la branche aussi:

gem 'foo', path: "point/to/your/path", branch: "branch-name" 
0

Vous pouvez référencer des pierres précieuses avec la source : source: 'https://source.com', git repository (:github => 'git/url') et avec le chemin d'accès local :path => '.../path/gem_name'.Vous pouvez en apprendre plus sur Gemfiles and how to use them dans cet article.

Questions connexes