Управление версиями/зависимостями gem для Rails

Просто немного предыстории, я родом из сильного C#/статически типизированного фона. Поэтому я склонен думать о .dll. Поэтому, если бы я работал над проектом, я бы ссылался на свои необходимые библиотеки DLL, и это было бы так.

Будучи новичком в Ruby и Rails, я обнаружил, что могу делать что-то не так. Например, я создаю приложение Rails дома, используя гемы, которые есть у меня локально. Используя другой компьютер (скажем, рабочий компьютер), я пытаюсь работать над проектом только для того, чтобы обнаружить, что использую разные версии драгоценных камней. После установки пакета я вернулся к рабочему проекту.

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

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


person Finglas    schedule 07.12.2010    source источник


Ответы (2)


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

Неполный список функций:

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

и так далее. Чтобы узнать больше об этом, посетите этот http://gembundler.com/rationale.html.

Что касается вашего вопроса: да, сборщик будет использовать последнюю доступную версию, если она не указана.

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

person Marcel Falliere    schedule 07.12.2010
comment
Хороший. Я не знал, что вы можете опустить версии в файле пакета. Решает мою проблему с нарушением сборки из-за различий в версиях 0.0.1. - person Finglas; 07.12.2010

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

gem "rails", "2.3.8"

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

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

Еще одним полезным инструментом является Менеджер версий Ruby (RVM). функция, называемая gemsets, которая позволяет изолировать разные приложения или среды друг от друга. То есть у приложения A может быть отдельный набор драгоценных камней со всеми необходимыми драгоценными камнями, а у приложения B есть другой набор драгоценных камней только с необходимыми драгоценными камнями. Это немного уменьшит беспорядок в ваших зависимостях.

person harald    schedule 07.12.2010
comment
Первая ссылка битая - person Ain Tohvri; 01.02.2019