Wo lagert Bundler Edelsteine?

74

Ich weiß, dass bei der Verwendung gem installder Edelstein unter /home/username/.rvm/gems/ gespeichert wird, unter welchem ​​Gemset der Edelstein installiert wurde.

Aber wenn ich Bundler verwende und den Edelstein in der Gemfile spezifiziere, wo werden diese Edelsteine ​​gespeichert, wenn ich die Bundle-Installation ausführe? Und was ist, wenn ich das Gem bereits mit installiert habe gem installund wenn ich die Bundle-Installation ausführe, wird es das vorherige Gem verwenden, das mit installiert wurde gem install?

gerky
quelle
26
bundle show <gemname>
Chowlett
Danke, ich habe diesen Befehl total vergessen.
Gerky

Antworten:

58

Es hängt davon ab, ob. In der üblichen Entwicklungskonfiguration werden sie dort installiert, wo sie sich befinden würden, wenn Sie einen Edelstein "normal" (durch Ausführen gem install foo) installieren und der Bundler bereits vorhandene Edelsteine ​​nicht neu installiert. Dieser Speicherort hängt davon ab, wie Rubygems selbst konfiguriert ist.

Wenn Sie die Bundle-Installation mit der --deploymentOption ausführen, werden die Edelsteine ​​an einem für Ihre App eindeutigen Speicherort installiert (Sie können dies als separate Option übergeben, standardmäßig jedoch als Anbieter / Bundle).

Sie können auch ausführen bundle package, um alle .gem-Dateien zu speichern, in denen Ihre App verwendet vendor/cache. Beim Ausführen bundle installwerden Edelsteine ​​im Anbieter / Cache Edelsteinen an anderen Orten vorgezogen.

Frederick Cheung
quelle
cool! Vielen Dank für das Hinzufügen weiterer Details, sehr geschätzt.
Gerky
Sie können auch den Installationspfad als Parameter für die Bundle-Installation angeben :$ bundle install --path vendor/bundle
Webwurst
6
Ich habe die Antwort nicht verstanden. Wie lautet also der Standardinstallationspfad für die Bundle-Installation? Wenn es in der Entwicklung verwendet wird.
Sida Zhou
In der Entwicklung werden sie an derselben Stelle installiert, an der sie gerade ausgeführt werden gem install(was von GEM_HOME, GEM_PATH usw. abhängt)
Frederick Cheung,
Standardmäßig werden also alle Edelsteine ​​an einem systemweiten (im Gegensatz zu projektspezifischen) Speicherort installiert.
David
69

Wenn Sie herausfinden möchten, wo ein bestimmter Edelstein gespeichert ist, können Sie ihn ausführen bundle info <gem-name>. Zum Beispiel:

user@host$ bundle info rake
/var/bundle/ruby/2.1.0/gems/rake-10.4.2

Für ältere Versionen von Rake könnte der Befehl sein bundle show <gem_name>.

James Kingsbery
quelle
Bedeutet dies, dass alle Edelsteine ​​nur auf Ihrem Rubin installiert sind?
Jwan622
1
Beachten Sie, dass bundle show GEMzugunsten vonbundle info GEM
Greg
3

Hier /usr/local/lib/ruby/gems/2.1.0/gems/und hier : /usr/local/lib/ruby/gems/2.1.0/bundler/gems/.

Robert Reiz
quelle
4
Ich würde mir vorstellen, dass dies nur für bestimmte Betriebssysteme gilt
James Kingsbery
4
Wissen Sie, wie Bundler entscheidet, welche Edelsteine ​​in welches Verzeichnis verschoben werden?
David Winiecki
1

Beachten Sie, dass Edelsteine ​​auch in dem bundleOrdner in Ihrem "Edelsteinpfad" installiert sind (siehe :) bundle env. Dies geschieht zum Beispiel mit Edelsteinen, die installiert wurden von git:

gem 'my-gem', git: "https://github.com/x/y.git"

Ich gehe davon aus, dass benutzerdefinierte Installationen nicht mit Installationen von einem Gem-Server in Konflikt stehen.

Das ist mein Design
quelle
0

Ich benutze, um bundle config pathzu sehen, wo Edelsteine ​​aufbewahrt werden.

Bartonstanley
quelle