Определение того, какой rubygem вы используете - PullRequest
6 голосов
/ 11 июля 2009

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

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

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

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

Я sudo установил самоцвет 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

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

Ответы [ 5 ]

5 голосов
/ 11 июля 2009

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

3 голосов
/ 11 июля 2009

Прежде всего, 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"
1 голос
/ 24 февраля 2015

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

require 'rubygems'; puts Gem::VERSION

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

1 голос
/ 06 октября 2009

список драгоценных камней ххх по умолчанию загружается последняя версия.

0 голосов
/ 11 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...