Bundler vs RVM vs gems vs RubyGems vs gemsets vs system ruby ​​[đã đóng]


102

Tôi mới làm quen với Ruby và đang cố gắng xoay quanh các khái niệm sau: Bundler vs RVM vs gems vs RubyGems vs gemsets vs system rub và tôi bối rối.

Ai đó có thể vui lòng mô tả 'phương pháp hay nhất' về cách tôi nên quản lý tất cả những điều này trên bản cài đặt mới của phiên bản Ubuntu mới nhất không? Tôi nên cài đặt những gì và làm thế nào để sử dụng tất cả?

Tôi đoán rằng làm một sudo apt-get install rubykhông được khuyến khích, nhưng tôi không chắc chắn. Tôi đã thử nó trên hệ thống của mình cùng với 'tất cả các thứ Ruby khác'. Nó chỉ làm tăng thêm sự bối rối của tôi. Tôi không nói về Rails mà chỉ là những viên ngọc Ruby thông thường (ví dụ: Vagrant, Chef, scripts).

Câu trả lời:


184

Theo như câu trả lời trước, điều này còn khá nhiều thứ cần trình bày, vì vậy hãy coi đây là một phần giới thiệu ngắn.

đá quý là cách các thư viện Ruby được đóng gói. Chúng đối với Ruby là những gì đối với Java. Bên trong tệp đá quý, bạn tìm thấy mã Ruby (tệp .rb), nhưng cũng kiểm tra và một tệp đặc biệt cung cấp thông tin về chính viên đá quý, chẳng hạn như tên, phụ thuộc và phiên bản ( gemspec ). Bất kỳ dự án Ruby nào cũng có thể xác định các đá quý mà nó cần thông qua một Gemfile mà chỉ cần khai báo các phụ thuộc. Rubygems là tên của trình quản lý gói - công cụ được sử dụng để cài đặt các gói (trong khi các viên đá quý là chính các gói). Rubygems hiện là một phần của Ruby.

Bundler là thứ làm cho việc quản lý đá quý trở nên dễ chịu. Dựa trên Gemfile của bạn, một cuộc gọi đơn giản đến gói bằng cách sử dụng cài đặt gói sẽ tải xuống và cài đặt tất cả các đá quý cần thiết. Sử dụng lệnh gem tiêu chuẩn, bạn sẽ phải cài đặt thủ công từng lệnh trong số chúnggem install <gem_name>. Bundler không phải là một phần của Ruby (bản thân nó được đóng gói như một viên đá quý ), nhưng nó là "tiêu chuẩn thực tế" cho hầu hết các ứng dụng (bạn sẽ không thấy nhiều người không sử dụng nó và thực tế không có lý do chính đáng để không sử dụng nó).

RVM là một công cụ cho phép bạn cài đặt nhiều phiên bản Ruby trên một máy, chuyển đổi giữa chúng khi cần thiết. Điều này có thể được sử dụng để cài đặt cả Ruby 1.8 và 1.9, hoặc thậm chí là "MRI" (Matz's Ruby, cài đặt mặc định) và các lựa chọn thay thế (chẳng hạn như JRuby hoặc Rubinius). Lưu ý rằng RVM không đơn độc trong trường này, hãy xem ví dụ rbenv .

Một gemset trong RVM là một tập hợp của đá quý đặc trưng cho một bối cảnh nhất định, thường là một dự án. Điều này rất hữu ích nếu chẳng hạn bạn đang phát triển các ứng dụng khác nhau, mỗi ứng dụng có các bộ đá quý riêng và muốn giữ chúng riêng biệt.

hệ thống Ruby , khi sử dụng RVM, phiên bản Ruby được cài đặt trên máy (tức là không phải qua RVM).

Nếu bạn chỉ mới bắt đầu, đá quý và công cụ gói sẽ được bạn quan tâm. Bạn có thể để RVM và các bộ đá quý sang một bên.


1
Câu trả lời tốt, bạn có thể vui lòng làm rõ: Sự khác biệt giữa đá quý và RubyGems là gì? Và giữa gemspec và Gemfile? Ngoài ra, chương trình nào trong số các chương trình này (ví dụ: Bundler) được liệt kê ở trên được bao gồm với 'Ruby' và ứng dụng nào là các ứng dụng riêng biệt (tôi tin rằng RVM là riêng biệt)? Và gemset chỉ là một khái niệm chỉ trong RVM hay nó cũng nằm trong lõi Ruby (hoặc những thứ khác, như rbenv được đề cập trong câu trả lời khác)? Và nếu Bundler làm cho việc quản lý đá quý dễ dàng hơn, thì cách làm của pre-Bundler là gì? (tức là Bạn sẽ quản lý đá quý như thế nào mà không có gói, chỉ để tôi biết, ngay cả khi tôi không bao giờ làm theo cách đó.) Cảm ơn!
user779159 23/03

Vậy Rubygems là tên của trình quản lý gói mà bạn gọi bằng lệnh 'gem'? Và liệu Bundler có phải là một phần của chính Ruby, giống như Rubygems, hay tôi cần phải đưa nó vào bằng cách nào đó?
user779159

2
"Nếu bạn chỉ mới bắt đầu ... [y] bạn có thể để RVM ... sang một bên ngay bây giờ." Trừ khi bạn đang sử dụng OS X, và dự án Ruby bạn muốn cài đặt và chạy phụ thuộc vào phiên bản Ruby mới hơn so với phiên bản được cài đặt sẵn trên hệ điều hành. Sau đó, bạn sẽ cần RVM.
Hephaestus

Điều này không đúng: "Sử dụng lệnh gem tiêu chuẩn, bạn sẽ phải cài đặt từng lệnh theo cách thủ công." Bạn chắc chắn có thể cài đặt tất cả đá quý trong tệp gem của mình bằng một lệnh duy nhất "cài đặt đá quý"
Andy

1

Bạn đang yêu cầu nhiều thông tin trong một câu hỏi hơn là trong phạm vi của Stack Overflow. Để bao gồm tất cả sẽ cần một cuốn sách.

Trên Ubuntu, rất dễ dàng để cài đặt và gỡ bỏ gem cho phiên bản "hệ thống" của Ruby, vì vậy hãy làm quen với việc cài đặt và gỡ bỏ gem thông thường sudo. (Trên Mac OS, tôi sẽ đưa ra những lời khuyên khác nhau vì Apple gói Ruby để sử dụng cho riêng họ và không phải là một ý tưởng tuyệt vời để làm rối với nó.) Sau đó, khi bạn có ý tưởng về toàn bộ ý tưởng đá quý hoạt động và bạn biết rằng bạn muốn nhiều Các phiên bản Ruby trên hệ thống của bạn, hãy thử " rbenv " hoặc " RVM " và cài đặt một hoặc hai phiên bản trong hộp cát của bạn.

Linux giúp dễ dàng thêm / bớt Ruby thông qua bản phân phối, nhưng chúng tôi bị giới hạn ở các phiên bản mà người bảo trì bản phân phối đã đóng gói, vì vậy tôi thường cài đặt từ nguồn. Nhưng, đó là một khó khăn khi quản lý một số phiên bản của Ruby cho các hệ thống phát triển, thử nghiệm và sản xuất, đó là lý do tại sao rbenvRVM được phát minh - chúng xử lý các chi tiết bẩn cho phép chúng ta tập trung vào lập trình.

Tôi đã sử dụng cả rbenvRVM , và đã sử dụng rbenv trong sáu tháng qua hoặc lâu hơn, với kết quả tốt. Nó ít phức tạp hơn RVM mà tôi thích. Trong cả hai trường hợp, chúng giúp dễ dàng cài đặt các phiên bản khác nhau, với các bộ Đá quý riêng biệt. Bạn có thể mở các phiên bản Ruby khác nhau trong các cửa sổ đầu cuối khác nhau nếu muốn, giúp dễ dàng kiểm tra tính tương thích.

Quy tắc một khi gỡ lỗi là thực hiện các thay đổi lần lượt, đúng với việc học lập trình hoặc học một ngôn ngữ mới. Đừng bị phân tâm, chỉ cần giữ nó đơn giản.


1
Không bao giờ sudo bất kỳ trình quản lý gói nào khác với trình quản lý gói hệ thống mặc định của bạn (ví dụ: apt hoặc apt-get). Bạn chắc chắn sẽ làm rối hệ thống của mình.
hình ảnh
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.