Ich habe ein paar Gem-Dateien, über die ich installiere gem install xx.gem
. Kann ich Bundler anweisen, sie zu verwenden? Oder muss ich den Quellpfad angeben?
Antworten:
Dies ist nicht unbedingt eine Antwort auf Ihre Frage zur Installation von .gem
Paketen. Sie können jedoch alle Arten von Speicherorten einzeln festlegen, indem Sie Ihre Gem-Datei bearbeiten .
:path
Attribut angeben , wird das Juwel von diesem Pfad auf Ihrem lokalen Computer installiert.gem "foreman", path: "/Users/pje/my_foreman_fork"
:git
Attribut angeben, wird das Juwel aus einem Remote-Git-Repository installiert.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"
(Wie @JHurrah in seinem Kommentar erwähnt hat .)
gem "foreman", :git => "https://github.com/pje/foreman.git"
Anscheinend kann der Bundler keine .gem-Dateien sofort verwenden. Das Zeigen des Pfads: auf ein Verzeichnis mit .gem-Dateien funktioniert nicht. Einige Leute schlugen vor, einen lokalen Gem-Server (geminabox, stickler) für diesen Zweck einzurichten.
Was ich jedoch als viel einfacher empfunden habe, ist die Verwendung eines lokalen Gem- "Servers" aus dem Dateisystem: Legen Sie Ihre .gem-Dateien einfach in einem lokalen Verzeichnis ab und verwenden Sie dann "gem generate_index", um daraus ein Gem-Repository zu machen
mkdir repo
mkdir repo/gems
cp *.gem repo/gems
cd repo
gem generate_index
Zeigen Sie abschließend mit dem Bundler auf diesen Speicherort, indem Sie Ihrem Gemfile die folgende Zeile hinzufügen
source "file://path/to/repo"
Wenn Sie die Edelsteine im Repository aktualisieren, müssen Sie den Index neu generieren.
source "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
gems
Ordner des repo
Ordners gelegt hatte, sondern nur in den repo
Ordner. Haben Sie einen gems
Ordner erstellt?
Standardmäßig überprüft Bundler zuerst Ihr System und verwendet die in Ihrer Gem-Datei angegebenen Quellen, wenn es keinen Edelstein findet.
Sie können Bundler zwingen, die von Ihnen bereitgestellten Gems mit "Bundle Package" und "Bundle Install --local" zu verwenden.
Auf Ihrer Entwicklungsmaschine:
bundle install
(Installiert die erforderlichen Edelsteine und macht Gemfile.lock)
bundle package
(Zwischenspeichert die Edelsteine im Anbieter / Cache)
Auf dem Server:
bundle install --local
(--local bedeutet "benutze die Edelsteine von Vendor / Cache")
bundle install
der Gem- Datei, bevor Sie dies tun . Kopieren Sie anschließend die Gem-Datei in den Hersteller / Cache , fügen Sie den Gem wieder in die Gem-Datei ein und führen Sie bundle install --local
bundle package
ist auch jetzt, drei Jahre später, ein großartiger Vorschlag. Wenn Ihre Version von Bundler älter als 2.0 ist (zum jetzigen Zeitpunkt noch nicht veröffentlicht), müssen Sie diese verwenden, bundle package --all
wenn Sie Edelsteine mit path
oder git
Abhängigkeiten einschließen möchten . Sie erhalten jedoch eine hilfreiche Erinnerung, wenn solche Abhängigkeiten erkannt werden.
--local
Dokumenten heißt es: "Beachten Sie, dass ein geeignetes plattformspezifisches Juwel auf rubygems.org nicht gefunden wird, wenn es vorhanden ist."
Hinzufügen .gem
zu vendor/cache
scheint zu funktionieren. Keine Optionen erforderlich in Gemfile
.
Ich fand es am einfachsten, meinen eigenen Gem-Server mit zu betreiben geminabox
Siehe diese einfachen Anweisungen .