ruby-on-rails ruby - Comment puis-je spécifier une gem locale dans mon Gemfile?




tutorial open (6)

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

Je voudrais que Bundler charge une gem locale. Y a-t-il une option pour cela? Ou dois-je déplacer le dossier gem dans le répertoire .bundle?


En plus de spécifier le chemin (comme Jimmy l'a mentionné), vous pouvez également forcer Bundler à utiliser une gem locale pour votre environnement uniquement en utilisant 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 vu sur les docs .


Pour utiliser le référentiel gem local dans un projet Rails, procédez comme suit:

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

    git rev-parse --is-inside-work-tree
    
  2. Obtention du 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 gem 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. L' bundle install cours 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 gemme et /path/to/local/git/repository partir du point 2

  6. Enfin, lancez la bundle list , pas la 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 que 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 que RubyMine ne montre pas les gemmes locales comme une bibliothèque externe. Plus d'informations sur le bug peuvent être trouvées here et here
  • Quand je change quelque chose dans la gemme locale, afin d'être chargé dans l'application de rails je devrais stop/start le serveur de rails
  • Si je change la version de la gemme, l' stopping/starting du serveur Rails me donne une erreur. Afin de le réparer, je spécifie la version gemme dans l'application de rails Gemfile comme ceci:

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

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 cela change, je cours

bundle exec gem uninstall foo
bundle update foo

Mais je ne suis pas sûr que tout le monde doit exécuter ces deux étapes.


Je crois que vous pouvez faire ceci:

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

Ce n'est pas strictement une réponse à votre question sur l'installation des paquets .gem , mais vous pouvez spécifier toutes sortes d'emplacements sur une base de gem-by-gem en éditant votre Gemfile .

La spécification d'un attribut :path va installer la gemme à partir de ce chemin sur votre machine locale.

gem "foreman", :path => "/Users/pje/my_foreman_fork"

Alternativement, spécifier un attribut :git va installer le gem depuis un dépôt git distant.

gem "foreman", :git => "git://github.com/pje/foreman.git"

# ...or at a specific SHA-1 ref
gem "foreman", :git => "git://github.com/pje/foreman.git", :ref => "bf648a070c"

# ...or branch
gem "foreman", :git => "git://github.com/pje/foreman.git", :branch => "jruby"

# ...or tag
gem "foreman", :git => "git://github.com/pje/foreman.git", :tag => "v0.45.0"

(Comme mentionné dans son commentaire .)





ruby-on-rails ruby ruby-on-rails-3 rubygems bundler