pakiet szyn czysty

88

Po aktualizacji paczki będziesz mieć kilka klejnotów, które mogą być przestarzałe - ponieważ została zainstalowana nowsza wersja tego klejnotu. Nie ma takiego polecenia pod bundleplikiem wykonywalnym tj bundle clean. Jak pozbyć się tych przestarzałych klejnotów?

To jest próba zmniejszenia rozmiaru ślimaka w mojej aplikacji rails.

iGbanam
źródło

Odpowiedzi:

132

Jeśli używasz Bundlera 1.1 lub nowszego, możesz użyć bundle clean, tak jak sobie wyobrażałeś, że możesz. Jest to zbędne, jeśli używasz bundle install --path(Bundler zarządza lokalizacją określoną przez --path, więc bierze odpowiedzialność za usuwanie przestarzałych klejnotów), ale jeśli użyłeś Bundlera do zainstalowania klejnotów jako klejnotów systemowych bundle clean --force, usunie wszystkie klejnoty systemowe wymagane przez twój plik Gemfile. Oślepiająco oczywiste zastrzeżenie: nie rób tego, jeśli masz inne aplikacje, które polegają na klejnotach systemowych, których nie ma w twoim Gemfile!

Pat Shaughnessy ma dobry opis bundle cleani inne nowości w pakiecie 1.1 .

David Waller
źródło
30
Dla tych, którzy używają rvm, pamiętaj, że bundle clean --forcenie dotyczy to twoich globalnych klejnotów, ale tylko tych w twoim obecnym zestawie klejnotów. bundle clean --forceDaje więc ten sam wynik co i szybciej niż rvm gemset emptynastępuje bundle install.
Gabe Kopley
19
OŚWIADCZENIE: "Czystość pakietu - siła" może zniszczyć dużą liczbę klejnotów, jeśli nie będziesz ostrożny. To powinna być pierwsza linijka tej odpowiedzi ... zwłaszcza, że ​​ma tak wiele głosów. BĄDŹ OSTROŻNY!
jerrylroberts
36

Jeśli używasz RVM, możesz użyć rvm gemset emptydla bieżącego zestawu gemset - to polecenie usunie wszystkie klejnoty zainstalowane w obecnym zestawie gemset (sam gemset pozostanie na miejscu). Następnie uruchom bundle install, aby zainstalować aktualne wersje klejnotów. Upewnij się również, że nie usuniesz takich ogólnych klejnotów, jak rake, bundler i tak dalej podczas rvm gemset empty(jeśli tak jest, zainstaluj je ręcznie przez gem installwcześniej bundle install).

Trushkevich
źródło
22

Jeśli używasz RVM, możesz zainstalować swoje klejnoty w klejnotach . W ten sposób, jeśli chcesz przeprowadzić pełne czyszczenie, możesz po prostu usunąć zestaw klejnotów, który z kolei usunie wszystkie zainstalowane w nim klejnoty. Inną opcją jest po prostu odinstalowanie nieużywanych klejnotów i ponowne uruchomienie bundle installpolecenia.

Ponieważ pakiet ma być narzędziem do wersjonowania klejnotów projektu na projekt, nie udostępnia bundle cleanpolecenia. Oznaczałoby to możliwość usunięcia klejnotów związanych również z innymi projektami, co nie byłoby pożądane. Oznacza to, że bundler jest prawdopodobnie niewłaściwym narzędziem do zarządzania katalogiem gem. Moją osobistą rekomendacją byłoby użycie klejnotów RVM do piaskownicy klejnotów w niektórych projektach lub wersjach ruby.

Pan Thomakos
źródło
41
Nie ma potrzeby usuwania gemset, wystarczy wpisać „rvm gemset empty gemset_name”, a następnie ponownie uruchomić „bundle install”.
JAG,
Świetne wyjaśnienie. Świadomość tego o pakiecie pomaga. Dzięki.
Volte
9
czysty pakiet - siła wykona zadanie
marynarz
rvm, wyczyść folder .rvm / gems / ruby-xxxxxx / specyfikacji, jeśli „instalacja pakietowa” odmawia ponownego pobrania klejnotów.
Barbacan
@JAG Dodałbym, że po wyczyszczeniu gemset trzeba 'gem install bundler' by móc zadzwonić do instalacji paczki
maleta
13

Szczerze mówiąc, miałem problemy z zależnościami cyklicznymi bundlerów i najlepszym sposobem jest rm -rf .bundle. Oszczędź sobie bólu głowy i po prostu użyj młotka.

Tyler Brock
źródło
1
Musiałem to zrobić, aby przestał wkurzać mnie „musisz wywołać instalację pakietu z opcją --no-deployment”. Dzięki
Kevin,
2
Dzięki za pomysł. Chociaż dla mnie pomogło użycie większego młotka. rvm implode --forcea następnie ponownie zainstaluj rvm
Ryan,
1

Zakładam, że instalujesz klejnoty w vendor/bundle? Jeśli tak, dlaczego nie usunąć wszystkich klejnotów i wyczyścić bundle install?

Leonid Shevtsov
źródło
mój katalog dostawcy śledzi tylko zasoby i zainstalowane wtyczki. Jestem na Railsach 3.1
iGbanam
Więc jaki jest powód, aby usunąć nieużywane klejnoty, jeśli nie są kopiowane podczas wdrażania? Nie zajmują dużo miejsca.
Leonid Shevtsov
wdrażam tę aplikację rails w intranecie; co oznacza, że ​​obsługuję pliki i środowisko lokalnie. jeśli znasz jakieś rozwiązania, których mogę w tym celu użyć, podziel się nimi.
iGbanam
0

Po prostu usuń przestarzałe klejnoty ze swojego pliku klejnotów. Jeśli mówisz o Heroku (nie wspomniałeś o tym), to slug jest kompilowany przy każdym nowym wydaniu, używając tylko aktualnej zawartości tego pliku.

Gareth
źródło
to niekoniecznie dotyczy heroku. Chcę zmniejszyć rozmiar samej aplikacji szyn.
iGbanam
0

Po prostu wykonaj, aby usunąć przestarzałe klejnoty i usunąć ostrzeżenia o drukowaniu po pakiecie.

bundle clean --force

codevb
źródło