2009-07-11 34 views
6

Làm cách nào để xác định rubygem nào đang được sử dụng để đáp lại câu lệnh "yêu cầu"? đá quý mà dường như không giúp đỡ.Xác định rubygem nào bạn đang sử dụng

nền: đối với dự án hornsby-herbarium-parser, tôi đang sử dụng gem roo.

Tôi đã sử dụng đá quý github hmcgowan-roo, tại thời điểm đó nó gần đây hơn phiên bản rubyforge của roo. Tôi đã thử nghiệm mã trên runcoderun, và nó không thành công vì nó không có bất kỳ phiên bản nào của roo. Đến thời điểm này, các phiên bản mới của roo đã có sẵn trên cả github và rubyforge.

Tôi quyết định tôi cũng có thể xem phiên bản mới nhất của rubyforge có phù hợp với mã của tôi hay không, vì tôi cho rằng rubyforge chính thức hơn, có thẩm quyền và ổn định hơn so với github. Khi tôi chắc chắn phiên bản rubyforge hoạt động với mã của tôi, tôi sẽ yêu cầu runcoderun độc đáo nếu họ có thể cài đặt nó trên hệ thống của họ.

Tôi sudo gem cài đặt roo, và đá quý của tôi bây giờ bao gồm "hmcgowan-roo (1.3.5)" và "roo (1.3.6)", và chạy các thử nghiệm cho hornsby-herbarium-parser vẫn đi qua. Tôi biết rằng phiên bản rubyforge đã được cài đặt gần đây hơn, nó nên là phiên bản được sử dụng trong các thử nghiệm, nhưng tôi muốn có thể xác minh điều này.

gem which roo 

Không giúp đỡ, bởi vì nó đã cho tôi

(checking gem hmcgowan-roo-1.3.5 for roo) 
/usr/lib/ruby/gems/1.8/gems/hmcgowan-roo-1.3.5/lib/roo.rb 

mà tôi giả sử là câu trả lời sai.

Cập nhật: Tôi sử dụng cả hai

$:.detect {|dir| dir =~ /roo/} 

puts Roo::VERSION::STRING 

cả đồng ý với đá quý mà, nói rằng tôi vẫn đang sử dụng hmcgowan-roo-1.3.5.

+0

Bạn muốn hoặc từ CLI, hoặc từ bên trong Ruby, cả hai đều OK là nó? –

+0

Tương tự nhưng đối với Rails (do đó giả sử Bundler): http://stackoverflow.com/questions/1621405/how-to-tell-which-version-of-a-gem-a-rails-app-is-using –

Trả lời

3

Trước hết, rubygems sẽ được tải đá quý số phiên bản cao nhất, không phải là thời gian gần đây hầu hết các cài đặt. Vì vậy, bạn sẽ nhận được roo 1.3.6 ở đây.

Ngoài ra, đề xuất thứ hai của gerrit tìm kiếm hằng số phiên bản. Ví dụ, tôi chỉ nạp rmagick và có một Magick :: Version. Một ví dụ khác là Open4 :: VERSION.

Tuy nhiên không phải tất cả đá quý có một phiên bản liên tục, như vậy là một dự phòng mà bạn có thể làm điều gì đó hacky như:

>> require 'open4' 
=> true 

>> $:.detect {|dir| dir =~ /\/open4-([^\/]*)\//} 
=> "/Library/Ruby/Gems/1.8/gems/open4-0.9.6/bin" 

>> $1 
=> "0.9.6" 
+1

I không nghĩ đến $:, cảm ơn. Tuy nhiên, với biểu thức chính quy, nếu ai đó tạo johndoe-open4, thì nó sẽ không khớp. –

+0

Đúng, đúng. Đây là lý do tại sao tôi gọi nó là 'hacky' :) Nhưng có lẽ bạn có thể sửa nó thêm một chút. –

-1

Cách đơn giản nhất là gỡ cài đặt và sau đó cài đặt lại rubygems riêng lẻ. Tôi không chắc chắn rằng giả định của bạn về github không có nguồn ổn định là chính xác.

5

đặt Roo::VERSION::STRING

1

danh sách đá quý xxx nó mặc định để tải phiên bản mới nhất.

1

bạn có thể làm sử dụng Gem::VERSION

require 'rubygems'; puts Gem::VERSION 

rằng trong một chương trình ruby, mà là khá hữu ích nếu bạn muốn chắc chắn rằng ứng dụng của bạn dưới cùng một phiên bản của rubygems accrossing tất cả các máy (ví dụ bundler Gemfile)

Các vấn đề liên quan