2011-10-26 33 views
69

Sau khi cập nhật gói, bạn sẽ có một số đá quý có thể đã lỗi thời - vì phiên bản mới hơn của đá quý đó đã được cài đặt. Không có lệnh như vậy theo thực thi bundle tức là bundle clean. Làm thế nào để loại bỏ những viên đá quý lỗi thời này?đường ray gói sạch

Đây là một nỗ lực để giảm kích thước sên trong ứng dụng đường ray của tôi.

Trả lời

113

Nếu bạn đang sử dụng Bundler 1.1 hoặc mới hơn, bạn có thể sử dụng bundle clean, giống như bạn tưởng tượng bạn có thể. Điều này là thừa nếu bạn đang sử dụng bundle install --path (Bundler quản lý vị trí bạn đã chỉ định bằng --path, do đó phải chịu trách nhiệm xóa đá quý đã lỗi thời), nhưng nếu bạn đã sử dụng Bundler để cài đặt đá quý làm đá quý hệ thống thì bundle clean --force sẽ xóa mọi hệ thống đá quý không yêu cầu bởi Gemfile của bạn. Hiển nhiên rõ ràng: đừng làm điều này nếu bạn có các ứng dụng khác dựa vào đá quý hệ thống không có trong Gemfile của bạn!

Pat Shaughnessy có mô tả tốt về bundle clean and other new additions in bundler 1.1.

+20

Đối với những người sử dụng rvm, lưu ý rằng 'bó sạch - lực lượng 'không chạm vào đá quý toàn cầu của bạn, nhưng chỉ những viên đá quý hiện tại của bạn. Vì vậy, 'bundle clean --force' tạo ra kết quả tương tự và nhanh hơn' rvm gemset empty' theo sau là 'bundle install'. –

+15

KHUYẾN CÁO: "Gói sạch - lực lượng" có thể thổi bay một số lượng lớn đá quý nếu bạn không cẩn thận. Đó sẽ là dòng đầu tiên của phản ứng này ... đặc biệt là vì nó có rất nhiều phiếu bầu. HÃY CẨN THẬN! – jerrylroberts

21

Nếu bạn đang sử dụng RVM, bạn có thể cài đặt đá quý của mình thành gemsets. Bằng cách đó khi bạn muốn thực hiện một dọn dẹp hoàn toàn, bạn có thể chỉ cần loại bỏ gemset, từ đó loại bỏ tất cả các gem được cài đặt trong nó. Tùy chọn khác của bạn là chỉ cần gỡ cài đặt các đá quý chưa sử dụng của bạn và chạy lại lệnh bundle install của bạn.

Vì trình tạo gói có nghĩa là công cụ phiên bản đá quý dự án cho mỗi dự án, nó không cung cấp lệnh bundle clean. Làm như vậy sẽ có nghĩa là khả năng loại bỏ đá quý liên kết với các dự án khác là tốt, mà sẽ không được mong muốn. Điều đó có nghĩa rằng bundler có lẽ là công cụ sai để sử dụng để quản lý thư mục gem của bạn. Đề nghị cá nhân của tôi sẽ được sử dụng đá quý RVM để sandbox đá quý của bạn trong các dự án nhất định hoặc các phiên bản ruby.

+40

Không cần phải loại bỏ các gemset, bạn chỉ có thể gõ 'RVM gemset gemset_name rỗng' và sau đó chạy 'bó cài đặt' một lần nữa . – JAG

+0

Giải thích tuyệt vời. Biết rằng về bundler giúp. Cảm ơn. – Volte

+9

bundle clean --force sẽ thực hiện công việc – sailor

1

Tôi giả sử bạn cài đặt đá quý vào vendor/bundle? Nếu vậy, tại sao không chỉ xóa tất cả các đá quý và làm sạch bundle install?

+0

thư mục nhà cung cấp của tôi chỉ theo dõi tài sản và các plugin được cài đặt. Tôi đang ở trên Rails 3.1 – iGbanam

+0

Vậy lý do để loại bỏ đá quý không sử dụng nếu chúng không được sao chép khi triển khai là gì? Họ không chiếm nhiều không gian đó. –

+0

tôi đang triển khai ứng dụng đường ray này trên mạng nội bộ; nghĩa là tôi xử lý các tệp và môi trường cục bộ. nếu bạn biết về bất kỳ giải pháp nào tôi có thể sử dụng cho việc này, vui lòng chia sẻ. – iGbanam

0

Chỉ cần xóa các đá quý lỗi thời khỏi Gemfile của bạn. Nếu bạn đang nói về Heroku (bạn đã không đề cập đến điều đó) thì slug được biên dịch mỗi bản phát hành mới, chỉ sử dụng nội dung hiện tại của tệp đó.

+0

điều này không nhất thiết đối với heroku. Tôi muốn giảm kích thước của chính ứng dụng đường ray. – iGbanam

10

Thành thật mà nói, tôi gặp vấn đề với phụ thuộc vòng tròn gói và cách tốt nhất để đi là rm -rf .bundle. Tự cứu mình khỏi đau đầu và chỉ dùng búa.

+0

thực sự đã không giúp tôi, cùng một lỗi. – holms

+1

Tôi đã phải làm điều này để làm cho nó ngừng bugging tôi về "bạn phải gọi gói cài đặt với --no-triển khai". Cảm ơn – Kevin

+2

Cảm ơn ý tưởng. Mặc dù đối với tôi, sử dụng một cái búa lớn hơn đã giúp. 'rvm implode --force' và sau đó cài đặt lại rvm – Ryan

30

Nếu bạn đang sử dụng RVM, bạn có thể sử dụng rvm gemset empty cho gemset hiện tại - lệnh này sẽ loại bỏ tất cả các đá quý được cài đặt vào gemset hiện tại (gemset sẽ giữ nguyên). Sau đó chạy bundle install để cài đặt phiên bản đá quý thực tế. Ngoài ra hãy chắc chắn rằng bạn không xóa đá quý nói chung như rake, bundler và như vậy trong thời gian rvm gemset empty (nếu đúng như vậy, sau đó cài đặt chúng theo cách thủ công qua gem install trước bundle install).