binari puliti


88

Dopo aver aggiornato un pacchetto, avrai alcune gemme che potrebbero essere obsolete, poiché è stata installata una versione più recente di quella gemma. Non esiste un tale comando sotto l' bundleeseguibile es bundle clean. Come sbarazzarsi di queste gemme obsolete?

Questo è un tentativo di ridurre le dimensioni dello slug nella mia app rails.

Risposte:


131

Se stai usando Bundler 1.1 o successivo puoi usarlo bundle clean, proprio come immaginavi di poterlo fare. Questo è ridondante se stai usando bundle install --path(Bundler gestisce la posizione che hai specificato con --path, quindi si assume la responsabilità di rimuovere le gemme obsolete), ma se hai usato Bundler per installare le gemme come gemme di sistema bundle clean --force, eliminerai tutte le gemme di sistema no richiesto dal tuo Gemfile. Avvertimento ovvio e accecante: non farlo se hai altre app che si basano su gem di sistema che non sono nel tuo Gemfile!

Pat Shaughnessy ha una buona descrizione bundle cleane altre nuove aggiunte nel bundler 1.1 .


30
Per coloro che utilizzano rvm, nota che bundle clean --forcenon tocca le tue gemme globali, ma solo quelle nel tuo gemset attuale. Quindi bundle clean --forceproduce lo stesso risultato di ed è più veloce rvm gemset emptyseguito da bundle install.
Gabe Kopley

19
DISCLAIMER: "Bundle clean --force" può spazzare via un gran numero di gemme se non stai attento. Questa dovrebbe essere la prima riga di questa risposta ... soprattutto perché ha così tanti voti. STAI ATTENTO!
jerrylroberts

36

Se stai usando RVM puoi usare rvm gemset emptyper il gemset corrente: questo comando rimuoverà tutte le gemme installate nel gemset corrente (lo stesso gemset rimarrà al suo posto). Quindi esegui bundle installper installare le versioni effettive di gemme. Assicurati anche di non eliminare gemme generali come rake, bundler e così via durante rvm gemset empty(se è il caso, installale manualmente tramite gem installprima di bundle install).


22

Se si utilizza RVM è possibile installare il vostro gemme in gemsets . In questo modo, quando vuoi eseguire una pulizia completa, puoi semplicemente rimuovere il gemset, che a sua volta rimuove tutte le gemme installate al suo interno. L'altra opzione è semplicemente disinstallare le gemme inutilizzate e rieseguire il bundle installcomando.

Poiché bundler è pensato per essere uno strumento di versioning gem progetto per progetto, non fornisce un bundle cleancomando. Ciò significherebbe la possibilità di rimuovere anche gemme associate ad altri progetti, il che non sarebbe desiderabile. Ciò significa che il bundler è probabilmente lo strumento sbagliato da usare per gestire la tua directory gem. La mia raccomandazione personale sarebbe quella di utilizzare le gemme RVM per sandbox le tue gemme in determinati progetti o versioni rubino.


41
Non è necessario rimuovere gemset, puoi semplicemente digitare "rvm gemset empty gemset_name" e quindi eseguire nuovamente "bundle install".
JAG

Ottima spiegazione. Sapere che sul bundler aiuta. Grazie.
Volte

9
bundle clean --force farà il lavoro
marinaio

con rvm, cancella la cartella .rvm / gems / ruby-xxxxxx / specific se "bundle install" si rifiuta di scaricare nuovamente gems.
Barbacan

@JAG Vorrei aggiungere che è necessario "gem install bundler" dopo aver pulito gemset per poter chiamare l' installazione del bundle
maleta

13

Onestamente, ho avuto problemi con le dipendenze circolari del bundler e il modo migliore per procedere è rm -rf .bundle. Salva te stesso il mal di testa e usa il martello.


1
Ho dovuto farlo per far sì che smettesse di infastidirmi su "devi chiamare l'installazione del bundle con --no-deployment". Grazie
Kevin

2
Grazie per l'idea. Anche se per me, usare un martello più grande ha aiutato. rvm implode --forcee quindi reinstallare rvm
Ryan

1

Presumo che installi gemme vendor/bundle? In tal caso, perché non eliminare tutte le gemme e fare una pulizia bundle install?


la mia directory del fornitore tiene traccia solo delle risorse e dei plugin installati. Sono su Rails 3.1
iGbanam

Allora qual è il motivo per rimuovere le gemme inutilizzate se non vengono copiate durante la distribuzione? Non occupano molto spazio.
Leonid Shevtsov,

sto distribuendo questa app rails su una intranet; il che significa che gestisco i file e l'ambiente localmente. se conosci qualche soluzione che posso usare per questo, per favore condividi.
iGbanam


0

Basta rimuovere le gemme obsolete dal tuo Gemfile. Se stai parlando di Heroku (non l'hai menzionato), lo slug viene compilato ad ogni nuova versione, usando solo il contenuto corrente di quel file.


questo non è necessariamente per heroku. Voglio ridurre le dimensioni dell'app stessa.
iGbanam

0

Basta eseguire, per pulire le gemme obsolete e rimuovere gli avvisi di stampa dopo il bundle.

bundle clean --force

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.