Определение того, какой rubygem вы используете

Как определить, какой rubygem используется в ответ на запрос «require»? драгоценный камень, который, кажется, не помогает.

Предыстория: для проекта hornsby-herbarium-parser я использую gem roo.

Я использовал github gem hmcgowan-roo, так как на тот момент он был более свежим, чем версия roo для rubyforge. Я попытался протестировать код на runcoderun, и это не удалось, потому что у него нет версии roo. К этому времени новые версии roo были доступны как на github, так и на rubyforge.

Я решил, что могу также посмотреть, работает ли последняя версия rubyforge для моего кода, поскольку я предполагаю, что rubyforge более официальный, авторитетный и стабильный, чем форки github. Как только я буду уверен, что версия rubyforge работает с моим кодом, я вежливо спрошу у runcoderun, могут ли они установить ее в своей системе.

Я установил sudo gem roo, и мои драгоценные камни теперь включают «hmcgowan-roo (1.3.5)» и «roo (1.3.6)», и запуск тестов для hornsby-herbarium-parser все еще проходит. Я знаю, что, поскольку версия rubyforge была установлена совсем недавно, она должна использоваться в тестах, но я хочу убедиться в этом.

gem which roo

Не помогло, потому что это дало мне

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

что я предполагаю, что это неправильный ответ.

Обновление: я использовал оба

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

и

puts Roo::VERSION::STRING

оба согласны с gem which, говоря, что я все еще использую hmcgowan-roo-1.3.5.


person Andrew Grimm    schedule 11.07.2009    source источник
comment
Вы хотите либо из CLI, либо из Ruby, оба в порядке, не так ли?   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 02.09.2014
comment
Аналогично, но для Rails (таким образом, предполагается, что Bundler): -using" title="как узнать, какую версию драгоценного камня использует приложение rails"> stackoverflow.com/questions/1621405/   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 02.09.2014


Ответы (5)


Прежде всего, rubygems загрузит гем с самым высоким номером версии, а не с самой последней установленной. Таким образом, вы должны получить roo 1.3.6 здесь.

Кроме этого, я поддерживаю предложение Геррита искать константу версии. Например, я только что загрузил rmagick, и там есть константа Magick::Version. Другой пример — Open4::VERSION.

Однако не все гемы имеют константу версии, поэтому в качестве запасного варианта вы можете сделать что-то хакерское, например:

>> require 'open4'
=> true

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

>> $1
=> "0.9.6"
person Daniel Lucraft    schedule 11.07.2009
comment
Я не подумал о $: , спасибо. Однако с регулярным выражением, если кто-то создал johndoe-open4, оно не совпало бы. - person Andrew Grimm; 12.07.2009
comment
Правда правда. Вот почему я назвал это «хакерским» :) Но, может быть, вы могли бы исправить это немного больше. - person Daniel Lucraft; 12.07.2009

ставит Roo::VERSION::STRING

person gerrit    schedule 11.07.2009

gem list xxx по умолчанию загружает последнюю версию.

person rogerdpack    schedule 05.10.2009

вы можете использовать Gem::VERSION

require 'rubygems'; puts Gem::VERSION

это в программе ruby, что весьма полезно, если вы хотите убедиться, что ваше приложение работает с одной и той же версией rubygems на всех машинах (например, сборщик Gemfile)

person Huy Le    schedule 24.02.2015

Самый простой способ — удалить, а затем переустановить rubygems по отдельности. Я не уверен, что ваше предположение о том, что у github нет стабильных исходников, настолько точно.

person Cuervo's Laugh    schedule 11.07.2009