2012-05-03 7 views
16

Để làm rõ, tôi đang sử dụng rbenv để quản lý các phiên bản Ruby của tôi. Tôi đã theo ấn tượng rằng các tập tin nhị phân được quản lý như shims trong thư mục phiên bản ruby ​​tương ứng của chúng.Tôi đang sử dụng rbenv, vậy tại sao có hai đường dẫn Gem trên hệ thống của tôi? (OS X Lion)

Đây là những gì hệ thống của tôi cho thấy khi tôi chạy môi trường đá quý (tôi không bao gồm những phần không liên quan):

- GEM PATHS: 
    - /Volumes/Data/nathan/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1 
    - /Volumes/Data/nathan/.gem/ruby/1.9.1 

Bất kỳ lý do có hai địa điểm? óc tò mò muốn biết.

Trả lời

15

Tôi nghĩ rằng tôi đã tìm ra câu trả lời cho câu hỏi này, vì vậy tôi sẽ đăng nó.

Rbenv cho phép phiên bản ruby ​​toàn cầu và/hoặc cục bộ. Vì vậy, một khi ruby ​​được cài đặt và quản lý thông qua rbenv, bạn có thể khai báo nó như là một phiên bản ruby ​​toàn cầu được sử dụng bởi toàn bộ hệ thống của bạn.

Tương tự, bạn có thể khai báo phiên bản ruby ​​cục bộ trong một thư mục cụ thể (ví dụ: dự án đường ray cụ thể).

Tệp .gem trong đường dẫn nhà của bạn được sử dụng bởi phiên bản ruby ​​toàn cầu, trong đó thư mục được giấu trong thư mục rbenv được phiên bản ruby ​​cục bộ sử dụng.

Lưu ý, bạn có thể (vì bất kỳ lý do gì) khai báo phiên bản cục bộ giống với phiên bản toàn cầu. Trong trường hợp đó, phiên bản cục bộ sẽ dựa vào các tệp gem nằm trong thư mục rbenv sâu hơn, thay vì thư mục ~/.gem.

+6

Tôi sử dụng 'gem% gemname%' để xác định đường dẫn nơi gem được cài đặt. – pavelpopov

2
- /Volumes/Data/nathan/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1 

là từ rbenv, vì vậy ruby ​​tìm kiếm đá quý rbenv được cài đặt.

- /Volumes/Data/nathan/.gem/ruby/1.9.1 

Rõ ràng, rbenv không hạn chế bản thân để đá quý riêng của mình, mà là bao gồm các đá quý từ hệ thống ruby ​​là tốt, nhưng chỉ có những người đã được cài đặt như người dùng (thông qua gem --user-install).

+0

Vâng, đó chỉ là ... Tôi đã không cài đặt bất kỳ đá quý nào theo cách đó. Tôi đã cài đặt hệ điều hành sạch, cài đặt homebrew> rbenv> ruby> ray. Tôi cũng thiết lập ruby ​​toàn cầu ngay lập tức thông qua rbenv trước khi cài đặt đường ray. Từ dự án đường ray của tôi, tôi sử dụng bundler và Gemfile. Vì vậy ... tôi chỉ không thể thấy tại sao thư mục thứ hai này tồn tại. – Nathan

+0

Kiểm tra '$ GEM_PATH'. – Reactormonk

+3

Ý của bạn là gì? echo $ GEM_PATH? Nó không trả lại gì cả. – Nathan

5

Hãy nhớ rằng các trình quản lý phiên bản ruby ​​như rbenv và rvm là những sáng tạo tương đối gần đây. Trước khi chúng tồn tại, người dùng quản trị thường cài đặt ruby ​​ở một vị trí trên toàn hệ thống như/usr/local. Nhưng không phải quản trị viên cần một nơi để cài đặt đá quý của riêng họ, vì họ không có quyền ghi theo/usr/local. Vì vậy, những người sáng tạo rubygems quyết định thêm một đường đá quý thứ cấp trong thư mục chính của người dùng hiện tại, nó sẽ có cấu trúc tương tự với vị trí hệ thống.

Dưới đây là một ví dụ về những gì các con đường đá quý trông giống như trong những ngày cũ:

- /usr/local/lib/ruby/gems/1.9.1 
- /Users/kelvin/.gem/ruby/1.9.1 

Vẫn có thể máy nơi ruby ​​được cài đặt như thế này, và bạn vẫn có mà tin tưởng của con đường đá quý tự động phổ thông . Tất nhiên bạn cũng có thể thêm nhiều đường dẫn hơn bằng cách sử dụng biến môi trường GEM_PATH, nhưng biến tự động là tốt nhất để xử lý trường hợp phổ biến.

Nếu bạn có quyền quản trị viên hoặc bạn sử dụng trình quản lý phiên bản, bạn có thể bỏ qua thư mục ~/.gem dưới dạng tạo tác, một di tích của quá khứ nếu bạn muốn.