레일 번들 청소


88

번들을 업데이트 한 후에는 해당 gem의 최신 버전이 설치되었으므로 쓸모없는 gem이있을 것입니다. bundle실행 파일 아래에는 이러한 명령이 없습니다 bundle clean. 이 쓸모없는 보석을 어떻게 제거합니까?

이것은 내 레일 앱에서 슬러그 크기를 줄이기위한 시도입니다.

답변:


132

Bundler 1.1 이상을 사용하는 경우 bundle clean상상 한대로를 사용할 수 있습니다. bundle install --path(Bundler는 --path로 지정한 위치를 관리하므로 오래된 gem을 제거하는 책임을집니다) 사용하는 경우 중복 되지만, Bundler를 사용하여 gem을 시스템 gem으로 설치 한 경우 시스템 gem bundle clean --force은 삭제하지 않습니다. Gemfile에 필요합니다. 눈에 띄게 분명한주의 사항 : Gemfile에없는 시스템 젬에 의존하는 다른 앱이있는 경우이 작업을 수행하지 마십시오!

Pat Shaughnessy는 번 bundle clean들러 1.1에 대한 좋은 설명 과 기타 새로운 추가 사항을 가지고 있습니다.


30
rvm을 사용하는 사람들 bundle clean --force의 경우 전역 gem은 건드리지 않고 현재 gemset에있는 건 건드리지 않습니다. 그래서 bundle clean --force같은 결과를 생성하고 빠르게 다음됩니다 rvm gemset empty다음 bundle install.
Gabe Kopley 2013

19
면책 조항 : "Bundle clean --force"는주의하지 않으면 많은 보석을 날려 버릴 수 있습니다. 이 답변의 첫 번째 줄이되어야합니다. 특히 투표가 너무 많기 때문입니다. 조심해!
jerrylroberts 2013-08-09

36

RVM을 사용 rvm gemset empty하는 경우 현재 gemset에 사용할 수 있습니다. 이 명령은 현재 gemset에 설치된 모든 gem을 제거합니다 (gemset 자체는 그대로 유지됩니다). 그런 다음 bundle install실제 버전의 gem을 설치하기 위해 실행하십시오 . 또한 rake, bundler 등과 같은 일반 gem을 삭제하지 않도록하십시오 rvm gemset empty(이 경우 gem install이전 에을 통해 수동으로 설치하십시오 bundle install).


22

RVM을 사용하는 경우 gemsets에 gem을 설치할 수 있습니다 . 이렇게하면 전체 정리를 수행하고 싶을 때 gemset을 간단히 제거하면 설치된 모든 gem이 제거됩니다. 다른 옵션은 사용하지 않는 gem을 제거하고 bundle install명령을 다시 실행하는 것 입니다.

번 들러는 프로젝트 별 gem 버전 관리 도구이기 때문에 bundle clean명령을 제공하지 않습니다 . 그렇게하면 다른 프로젝트와 관련된 보석도 제거 할 수 있으므로 바람직하지 않습니다. 즉, 번 들러가 gem 디렉토리를 관리하는 데 사용하는 잘못된 도구 일 수 있습니다. 내 개인적인 권장 사항은 RVM gemset을 사용하여 특정 프로젝트 또는 루비 버전에서 gem을 샌드 박스로 만드는 것입니다.


41
gemset을 제거 할 필요가 없습니다. 'rvm gemset empty gemset_name'을 입력 한 다음 'bundle install'을 다시 실행할 수 있습니다.
JAG 2013 년

훌륭한 설명. 번 들러에 대해 알면 도움이됩니다. 감사.
Volte 2013 년

9
작업 할 것입니다 깨끗한 --force 번들
선원

rvm을 사용하여 "bundle install"이 gem 재 다운로드를 거부하는 경우 .rvm / gems / ruby-xxxxxx / specifications 폴더를 지 웁니다.
barbacan 2014-08-06

@JAG 번들 설치 를 호출 할 수 있도록 gemset을 정리 한 후 'gem install bundler' 가 필요하다고 추가합니다.
maleta

13

솔직히, 번 들러 순환 종속성에 문제가 있었고 가장 좋은 방법은 rm -rf .bundle. 두통을 피하고 망치를 사용하십시오.


1
"--no-deployment를 사용하여 번들 설치를 호출해야합니다."라는 문제를 해결하기 위해이 작업을 수행해야했습니다. 감사합니다
Kevin

2
아이디어 주셔서 감사합니다. 나에게는 더 큰 망치를 사용하는 것이 도움이되었지만. rvm implode --force다음 RVM 다시 설치
라이언

1

나는 당신이 보석을 설치한다고 가정 vendor/bundle합니까? 그렇다면 모든 보석을 삭제하고 정리를 수행하는 것은 bundle install어떻습니까?


내 공급 업체 디렉토리는 자산과 설치된 플러그인 만 추적합니다. I 'm on Rails 3.1
iGbanam 2011 년

그렇다면 배포시 복사되지 않는 경우 사용하지 않는 gem을 제거하는 이유는 무엇입니까? 그들은 그렇게 많은 공간을 차지하지 않습니다.
Leonid Shevtsov

이 rails 앱을 인트라넷에 배포하고 있습니다. 즉, 파일과 환경을 로컬로 처리합니다. 이 작업에 사용할 수있는 솔루션을 알고 있으면 공유해주세요.
iGbanam


0

Gemfile에서 쓸모없는 보석을 제거하십시오. Heroku에 대해 이야기하고 있다면 (당신은 언급하지 않았습니다) 슬러그는 해당 파일의 현재 내용을 사용하여 각각의 새 릴리스를 컴파일합니다.


이것은 heroku에 반드시 필요한 것은 아닙니다. 레일스 앱 자체의 크기를 줄이고 싶습니다.
iGbanam

0

쓸모없는 보석을 청소하고 번들 후 인쇄 경고를 제거하려면 실행하십시오.

bundle clean --force

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.