Schienenbündel sauber

88

Nach dem Aktualisieren eines Bundles haben Sie einige Edelsteine, die möglicherweise veraltet sind - da eine neuere Version dieses Edelsteins installiert wurde. Es gibt keinen solchen Befehl unter der bundleausführbaren Datei, dh bundle clean. Wie wird man diese veralteten Edelsteine ​​los?

Dies ist ein Versuch, die Schneckengröße in meiner Rails-App zu reduzieren.

iGbanam
quelle

Antworten:

131

Wenn Sie Bundler 1.1 oder höher verwenden, können Sie es so verwenden bundle clean, wie Sie es sich vorgestellt haben. Dies ist redundant, wenn Sie verwenden bundle install --path(Bundler verwaltet den mit --path angegebenen Speicherort, übernimmt also die Verantwortung für das Entfernen veralteter Edelsteine). Wenn Sie jedoch Bundler zum Installieren der Edelsteine ​​als Systemedelsteine ​​verwendet haben, werden alle Systemedelsteine bundle clean --forcenicht gelöscht von Ihrem Gemfile benötigt. Blendend offensichtliche Einschränkung: Tun Sie dies nicht, wenn Sie andere Apps haben, die auf Systemedelsteinen basieren, die nicht in Ihrer Gemfile enthalten sind!

Pat Shaughnessy hat eine gute Beschreibung bundle cleanund andere neue Ergänzungen in Bundler 1.1 .

David Waller
quelle
30
Beachten Sie bei Benutzern von rvm, dass bundle clean --forceIhre globalen Edelsteine ​​nicht berührt werden, sondern nur die in Ihrem aktuellen Gemset. So bundle clean --forceerzeugt das gleiche Ergebnis wie und schneller dann rvm gemset emptyanschließend bundle install.
Gabe Kopley
19
HAFTUNGSAUSSCHLUSS: "Bundle Clean - Force" kann eine große Anzahl von Edelsteinen wegblasen, wenn Sie nicht vorsichtig sind. Das sollte die erste Zeile dieser Antwort sein ... zumal sie so viele Stimmen hat. ACHTUNG!
Jerrylroberts
36

Wenn Sie RVM verwenden, können Sie es rvm gemset emptyfür das aktuelle Gemset verwenden. Mit diesem Befehl werden alle im aktuellen Gemset installierten Gems entfernt (Gemset selbst bleibt an Ort und Stelle). Führen Sie dann bundle installaus, um aktuelle Versionen von Edelsteinen zu installieren. Stellen Sie außerdem sicher, dass Sie keine allgemeinen Edelsteine ​​wie Rake, Bundler usw. während löschen rvm gemset empty(wenn dies der Fall ist, installieren Sie sie manuell über gem installvor bundle install).

trushkevich
quelle
22

Wenn Sie RVM verwenden, können Sie Ihre Edelsteine ​​in Edelsteinsätzen installieren . Auf diese Weise können Sie, wenn Sie eine vollständige Bereinigung durchführen möchten, einfach das Gemset entfernen, wodurch alle darin installierten Gems entfernt werden. Sie können auch einfach Ihre nicht verwendeten Edelsteine ​​deinstallieren und Ihren bundle installBefehl erneut ausführen .

Da der Bundler als Projekt-pro-Projekt-Gem-Versionierungstool gedacht ist, bietet er keinen bundle cleanBefehl. Dies würde die Möglichkeit bedeuten, Edelsteine ​​zu entfernen, die auch mit anderen Projekten verbunden sind, was nicht wünschenswert wäre. Das bedeutet, dass Bundler wahrscheinlich das falsche Tool ist, um Ihr Gem-Verzeichnis zu verwalten. Meine persönliche Empfehlung wäre, RVM-Edelsteine ​​zu verwenden, um Ihre Edelsteine ​​in bestimmten Projekten oder Ruby-Versionen zu sandboxen.

Pan Thomakos
quelle
41
Sie müssen das Gemset nicht entfernen. Sie können einfach 'rvm gemset empty gemset_name' eingeben und dann 'bundle install' erneut ausführen.
JAG
Tolle Erklärung. Das über Bundler zu wissen, hilft. Vielen Dank.
Volte
9
Bündel sauber - Kraft wird den Job machen
Seemann
Löschen Sie mit rvm den Ordner .rvm / gems / ruby-xxxxxx / spezifikationen, wenn "bundle install" das erneute Herunterladen von gems verweigert.
Barbacan
@JAG Ich würde hinzufügen, dass Sie nach dem Reinigen von gemset 'gem install bundler' benötigen, um bundle install
aufrufen
13

Ehrlich gesagt hatte ich Probleme mit zirkularen Abhängigkeiten von Bündlern und der beste Weg ist rm -rf .bundle. Sparen Sie sich die Kopfschmerzen und benutzen Sie einfach den Hammer.

Tyler Brock
quelle
1
Ich musste dies tun, damit es mich nicht mehr über "Sie müssen die Bundle-Installation mit --no-deploy aufrufen" nervt. Vielen Dank
Kevin
2
Danke für die Idee. Obwohl für mich die Verwendung eines größeren Hammers geholfen hat. rvm implode --forceund dann rvm neu installieren
Ryan
1

Ich nehme an, Sie installieren Edelsteine ​​in vendor/bundle? Wenn ja, warum nicht einfach alle Edelsteine ​​löschen und eine Reinigung durchführen bundle install?

Leonid Shevtsov
quelle
Mein Herstellerverzeichnis verfolgt nur Assets und installierte Plugins. Ich bin auf Schienen 3.1
iGbanam
Was ist dann der Grund, nicht verwendete Edelsteine ​​zu entfernen, wenn sie beim Bereitstellen nicht kopiert werden? Sie nehmen nicht so viel Platz ein.
Leonid Shevtsov
Ich stelle diese Rails-App in einem Intranet bereit. Das heißt, ich kümmere mich lokal um die Dateien und die Umgebung. Wenn Sie Lösungen kennen, die ich dafür verwenden kann, teilen Sie diese bitte mit.
iGbanam
0

Entferne einfach die veralteten Edelsteine ​​aus deiner Gemfile. Wenn Sie über Heroku sprechen (das haben Sie nicht erwähnt), wird der Slug bei jeder neuen Version kompiliert, wobei nur der aktuelle Inhalt dieser Datei verwendet wird.

Gareth
quelle
Dies ist nicht unbedingt für Heroku. Ich möchte die Größe der Rails-App selbst reduzieren.
iGbanam
0

Einfach ausführen, um veraltete Edelsteine ​​zu entfernen und Druckwarnungen nach dem Bündeln zu entfernen.

bundle clean --force

codevb
quelle