Управление версиями / зависимостями гемов для Rails - PullRequest
2 голосов
/ 07 декабря 2010

Просто немного фона, я пришел из сильного C # / статически типизированного фона.Поэтому я склонен думать с точки зрения .dll.Так что, если бы я работал в проекте, я бы сослался на свои необходимые библиотеки, и это было бы так.Например, я создаю приложение Rails дома, используя драгоценные камни, которые у меня есть локально.Используя другой компьютер (скажем, рабочий компьютер), я пытаюсь работать над проектом только для того, чтобы обнаружить, что я использую разные версии драгоценных камней.После установки пакета я вернулся к работающему проекту.

Проблема, с которой я столкнулся, заключается в том, что моя библиотека гемов стала «грязной».Я получаю несколько версий одного и того же камня.Так работают другие?При использовании драгоценного камня (из обязательного) будет ли по умолчанию установлена ​​последняя версия?Мне кажется, что я не правильно управляю зависимостями, хотя, как я уже говорил, я новичок в мире Ruby.

Если я просто включу свои зависимости, то выполняю установку пакета каждый раз, когда яесть разные / отсутствующие зависимости?Что произойдет, если я захочу перейти на более новую версию драгоценного камня?Это будет случай обновления гемфайла, который использует этот пакет, и продолжения его работы?

Ответы [ 2 ]

8 голосов
/ 07 декабря 2010

Да, bundler - это способ работать с зависимостями в Ruby on Rails.Зачем ?Во-первых, потому что он поставляется с ним (по крайней мере, для версии 3.0).Во-вторых, потому что это чертовски просто (в отличие от maven с Java).

Неисчерпывающий список возможностей:

  • позволяет вам объявить один или несколько хранилищ гемов для извлечения самоцветов из
  • для группировки ваших зависимостей по среде (разработка, производство ...)
  • , чтобы указать версию, которую вы хотите

и так далее.Подробнее об этом можно узнать здесь http://gembundler.com/rationale.html

По поводу вашего вопроса : да, бандлер примет последнюю доступную версию, если ни одна не указана.

Кроме того, я бы хотелдобавьте неудобство: вы не можете указать версию гема в зависимости от ОС.Например, у nokogiri есть версия linux и версия win.

0 голосов
/ 07 декабря 2010

Поведение по умолчанию, когда требуется модуль в геме, предполагает, что вам нужна последняя версия гема, если у вас установлено более одного. Вы можете изменить это с помощью , указав, какую версию вы хотите в конкретном приложении, например:

gem "rails", "2.3.8"

Прежде, чем вам понадобится что-нибудь из драгоценного камня. Это гарантирует, что это приложение будет использовать указанную версию гема, даже если установлена ​​более новая.

Конечно, вы можете очищать устаревшие версии ваших установленных драгоценных камней всякий раз, когда они вам больше не нужны, или если вы постоянно используете bundler: просто сотрите все и снова запустите bundler, чтобы установить только необходимые гемы.

Другим полезным инструментом является Ruby Version Manager (RVM), в дополнение к обработке различных версий ruby ​​он предоставляет функцию под названием gemsets, которая позволяет изолировать различные приложения или среды от друг друга. То есть приложение A может иметь свой отдельный набор драгоценных камней со всеми необходимыми для него драгоценными камнями, а приложение B может иметь другой набор драгоценных камней только с необходимыми драгоценными камнями. Это немного уменьшит беспорядок в ваших зависимостях.

...