webentwicklung-frage-antwort-db.com.de

Wie kann ich ein lokales Juwel in meiner Gemdatei angeben?

Ich möchte, dass Bundler ein lokales Juwel lädt. Gibt es dafür eine Option? Oder muss ich den gem-Ordner in das .bundle-Verzeichnis verschieben?

337
picardo

Ich glaube, Sie können das tun:

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

Zusätzlich zur Angabe des Pfads (wie von Jimmy erwähnt) können Sie Bundler auch dazu zwingen, einen lokalen Edelstein nur für Ihre Umgebung zu verwenden, indem Sie die folgende Konfigurationsoption verwenden:

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

Dies ist äußerst hilfreich, wenn Sie zwei Edelsteine ​​oder einen Edelstein und eine Rails App nebeneinander entwickeln.

Beachten Sie jedoch, dass dies nur funktioniert, wenn Sie git bereits für Ihre Abhängigkeit verwenden, zum Beispiel:

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

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

Wie am die docs gesehen.

217
bloudermilk

Sie können auch ein lokales Juwel mit git referenzieren, wenn Sie gerade daran arbeiten.

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

Dann, wenn es sich ändert, laufe ich

bundle exec gem uninstall foo
bundle update foo

Aber ich bin nicht sicher, ob jeder diese beiden Schritte ausführen muss.

30
Rimian

Um das lokale Gem-Repository in einem Rails Projekt zu verwenden, gehen Sie wie folgt vor:

  1. Überprüfen Sie, ob es sich bei Ihrem Gem-Ordner um ein Git-Repository handelt (der Befehl wird im Gem-Ordner ausgeführt).

    git rev-parse --is-inside-work-tree
    
  2. Abrufen des Repository-Pfads (der Befehl wird im Gem-Ordner ausgeführt)

    git rev-parse --show-toplevel
    
  3. Einrichten einer lokalen Außerkraftsetzung für die Anwendung Rails

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

    wo GEM_NAME ist der Name deines Edelsteins und /path/to/local/git/repository ist die Ausgabe des Befehls in Punkt 2

  4. Fügen Sie in Ihrer Anwendung Gemfile die folgende Zeile hinzu:

    gem 'GEM_NAME', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
    
  5. Laufen bundle install sollte ungefähr so ​​aussehen:

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

    wo GEM_NAME ist der Name deines Edelsteins und /path/to/local/git/repository von Punkt 2

  6. Führen Sie zum Schluss bundle list, nicht gem list und du solltest so etwas sehen:

    GEM_NAME (0.0.1 5a68b88)
    

    wo GEM_NAME ist der Name Ihres Edelsteins


Ein paar wichtige Fälle, die ich beobachte:

Rails 4.0.2  
Ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] 
Ubuntu 13.10  
RubyMine 6.0.3
  • Es scheint, dass RubyMine lokale Edelsteine ​​nicht als externe Bibliothek anzeigt. Weitere Informationen zum Fehler finden Sie hier und hier
  • Wenn ich etwas im lokalen Juwel ändere, um in die Rails Anwendung geladen zu werden, sollte ich stop/start der Rails Server
  • Wenn ich das version des Edelsteins ändere, stopping/starting Der Rails Server gibt einen Fehler aus. Um diesen Fehler zu beheben, gebe ich die Gem-Version in der Rails Anwendung Gemfile an. so was:

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

Sie können Edelsteine ​​mit Quelle referenzieren: source: 'https://source.com', git repository (:github => 'git/url') und mit lokalem Pfad :path => '.../path/gem_name'.
In diesem Artikel erfahren Sie mehr über Gemfiles und deren Verwendung .

0
Nesha Zoric