web-dev-qa-db-fra.com

Comment puis-je spécifier une gemme locale dans mon Gemfile?

J'aimerais que Bundler charge un joyau local. Y a-t-il une option pour cela? Ou dois-je déplacer le dossier Gem dans le répertoire .bundle?

337
picardo

Je crois que tu peux faire ça:

gem "foo", :path => "/path/to/foo"
509
Jimmy Cuadra

En plus de spécifier le chemin (comme Jimmy l’a mentionné), vous pouvez aussi forcer Bundler à utiliser une gemme locale pour votre environnement uniquement à l’aide de l’option de configuration suivante:

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

Ceci est extrêmement utile si vous développez deux gemmes ou une gemme et une application Rails côte à côte.

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 les docs .

217
bloudermilk

Vous pouvez également référencer un joyau local avec git si vous y travaillez.

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

Ensuite, si ça change je cours

bundle exec gem uninstall foo
bundle update foo

Mais je ne suis pas sûr que tout le monde ait besoin de suivre ces deux étapes.

30
Rimian

Pour utiliser le référentiel de gem local dans un projet Rails, suivez les étapes ci-dessous:

  1. Vérifiez si votre dossier gem est un référentiel git (la commande est exécutée dans le dossier gem)

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

    git rev-parse --show-toplevel
    
  3. Configuration d'un remplacement local pour l'application Rails

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

    GEM_NAME est le nom de votre gemme et /path/to/local/git/repository est le résultat de la commande du point 2

  4. Dans votre application Gemfile ajoutez la ligne suivante:

    gem 'GEM_NAME', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
    
  5. Lancer 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 pierre et /path/to/local/git/repository à partir du point 2

  6. Enfin, lancez 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


J'observe quelques cas importants 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 que RubyMine ne montre pas les gemmes locales en tant que bibliothèque externe. Plus d'informations sur le bogue peuvent être trouvées ici et ici
  • Lorsque je change quelque chose dans la gemme locale, pour pouvoir être chargé dans l'application Rails, je devrais stop/start le Rails serveur
  • Si je change la version de la gemme, stopping/starting le serveur Rails me donne une erreur. Afin de résoudre ce problème, je spécifie la version de la gemme dans le Rails application Gemfile comme ceci:

    gem 'GEM_NAME', '0.0.2', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
    
18
gotqn

Vous pouvez référencer des gemmes avec source: source: 'https://source.com', git repository (:github => 'git/url') et avec chemin local :path => '.../path/gem_name'.
Vous pouvez en apprendre plus sur Gemfiles et comment les utiliser dans cet article.

0
Nesha Zoric