Использование новейшей версии gem независимо от источника
Вопрос
Могу ли я попросить ruby или rubygems использовать последнюю версию gem независимо от ее источника?
Как упоминалось в обновлении к этот вопрос, оказывается, что ruby использует более старый github gem (hmcgowan-roo 1.3.5) поверх более нового rubyforge gem, который был установлен совсем недавно (roo 1.3.6).
Мое подозрение заключается в том, что magic pixy (либо ruby, либо rubygems) смотрит под "h", прежде чем искать под "r".
Я могу заставить использовать rubyforge, выполнив
gem "roo"
но можно ли сообщить ruby / rubygems, что я рад использовать либо hmcgowan-roo, либо roo, но мне нужна последняя версия?
Решение
Нет, к сожалению, это невозможно.Что касается RubyGems, то это не один и тот же gem, поэтому RubyGems не может автоматически определить, какая версия является последней.В целях паранойи строку require следует считать недетерминированной, если нет вызова метода gem и у вас установлено несколько версий одной и той же библиотеки.
В общем, вы хотите, чтобы ваши вызовы метода gem в любом случае находились в другом месте, чем требуется (это позволяет загружать файлы с задержкой), поэтому вполне разумно иметь часто обновляемый файл, который просто выполняет кучу вызовов метода gem, чтобы убедиться, что у вас есть правильная версия всего.Кроме того, в рабочей среде вы обычно не хотите выполнять команду "дайте мне последнюю версию", потому что последняя версия, возможно, изменила свой API или переименовала некоторые методы или что-то подобное, и если вы не протестировали ее, вы не знаете, сломается ли она.Вы всегда должны быть уверены, что используете конкретную, известную для работы версию каждой сторонней библиотеки.
Как автор библиотеки, я обычно предупреждаю людей об одной или двух версиях, если собираюсь внести изменения, которые нарушат прежнее использование API.Однако иногда люди какое-то время не обновляют, и их это застает врасплох.К счастью, большинство людей осторожны и все инсценируют.Не будьте тем парнем, который обновляет библиотеки непосредственно в рабочей среде, не тестируя их.:-)
Другие советы
Возможно, вы могли бы использовать метод gem, чтобы указать, какой из них вам нужен.