đường ray bó sạch


88

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 dưới bundlenghĩa là thực thi bundle clean. Làm cách nào để loại bỏ những viên ngọc lỗi thời này?

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

Câu trả lời:


131

Nếu bạn đang sử dụng Bundler 1.1 trở lên, bạn có thể sử dụng bundle clean, giống như bạn tưởng tượng. Đ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 đó, chịu trách nhiệm loại bỏ các viên ngọc lỗi thời), nhưng nếu bạn đã sử dụng Bundler để cài đặt các viên đá quý làm đá quý hệ thống thì bundle clean --forcesẽ xóa mọi viên ngọc hệ thống không yêu cầu bởi Gemfile của bạn. Cảnh báo rõ ràng đến mù quá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 mô tả tốt bundle cleanvà các bổ sung mới khác trong gói 1.1 .


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

19
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. Đó phải là dòng đầu tiên của phản hồi này ... đặc biệt là vì nó có rất nhiều phiếu bầu. HÃY CẨN THẬN!
jerrylroberts

36

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


22

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

Vì Bundler có nghĩa là một công cụ tạo phiên bản gem theo từng dự án nên nó không cung cấp bundle cleanlệnh. Làm như vậy có nghĩa là khả năng loại bỏ đá quý liên quan đến các dự án khác cũng không được mong muốn. Điều đó có nghĩa là Bundler có thể là công cụ sai để sử dụng để quản lý thư mục gem của bạn. Khuyến nghị cá nhân của tôi là sử dụng bộ đá quý RVM để hộp cát đá quý của bạn trong các dự án hoặc phiên bản ruby ​​nhất định.


41
Không cần gỡ bỏ gemset, bạn có thể chỉ cần gõ 'rvm gemset rỗng gemset_name' và sau đó chạy lại 'cài đặt gói'.
JAG

Lời giải thích tuyệt vời. Biết rằng về Bundler sẽ giúp ích. Cảm ơn.
Volte

9
bó sạch - lực lượng sẽ thực hiện công việc
thủy thủ

với rvm, xóa sạch thư mục .rvm / gems / ruby-xxxxxx / spec nếu "gói cài đặt" từ chối tải lại đá quý.
barbacan

@JAG Tôi muốn nói thêm rằng bạn cần phải 'gem install bundler' sau khi làm sạch gemset để có thể gọi bó cài đặt
maleta

13

Thành thật mà nói, tôi đã gặp vấn đề với sự phụ thuộc vòng tròn của gói và cách tốt nhất là rm -rf .bundle. Hãy đỡ đau đầu và chỉ cần sử dụng búa.


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

2
Cảm ơn vì ý tưởng. Mặc dù đối với tôi, sử dụng một chiếc búa lớn hơn đã giúp ích. rvm implode --forcevà sau đó cài đặt lại RVM
Ryan

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ỉ cần xóa tất cả các viên ngọc và làm sạch bundle install?


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

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

tôi đang triển khai ứng dụng rails 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 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 27/10/11


0

Chỉ cần loại bỏ các viên ngọc 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 đó.


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

0

Chỉ cần thực thi, để làm sạch đá quý đã lỗi thời và loại bỏ các cảnh báo in sau khi gói.

bundle clean --force

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.