Обязательно ли указывать версии Gem в Gemfile или нет для приложения rails - PullRequest
10 голосов
/ 07 сентября 2011

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

Но недавно я начал работать над несколькими проектами, которые разрабатывались в течение последних 6 месяцев. В этом проекте многие версии gem были указаны только в Gemfile, а Gemfile.lock был проигнорирован. Это вызвало много головной боли, чтобы окончательно разрешить конфликты версий и обновить несколько драгоценных камней.

Также узнал, что удаление Gemfile.lock из системы контроля версий приложения - плохая практика - хорошая статья от yehuda - http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/

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

ОБНОВЛЕНИЕ -

Обновление этого вопроса для правильного определения проблемы, поскольку Gemfile решает множество проблем:)

Проба 1 - У каждого разработчика должна быть одна и та же версия гемов. Фактически добавление Gemfile.lock в систему контроля версий решило эту проблему. Разработчики просто должны позаботиться о том, чтобы они запускали «комплектацию установки» / «комплектацию», а не «комплектацию обновления», поскольку это также обновит версии.

Проб 2 - Некоторые версии драгоценных камней, если они изменены, тормозят код приложения. На самом деле с omniauth существуют проблемы такого типа, так как API меняется с одной версии на другую. И да, чтобы приложение работало, необходимо указать версии для этого драгоценного камня.

Мой Проб. - Итак, в моем gemfile, поскольку версии для A и B строго определены, и так как они оба зависят от разных версий Z, что является зависимостью, я даже не могу запустить установку пакета или обновление пакета. Единственным решением было удалить версии и позволить бандлеру принять вызов. Вот почему у меня был вопрос, как - Gemfile.version_specification_mandatory? # => true / false

Ответы [ 3 ]

6 голосов
/ 08 сентября 2011

Я думаю, что лучше , а не указывать версии гемов в Gemfile. В редких случаях может потребоваться указать версию, например, когда более новая версия нарушает работу вашего приложения. Но указание версий для всех ваших драгоценных камней, как правило, излишне. Файл Gemfile.lock (который вы не редактируете, но проверяете контроль версий) не позволит использовать новые версии драгоценных камней в вашем приложении, пока вы не обновите их до явного обновления.

2 голосов
/ 07 сентября 2011

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

Bundler устанавливает последнюю версию или использует доступную версию в системе, если версия отсутствует.указано.Это работает для разработчика, потому что последняя версия имеет функцию, которая ей нужна.Но если функция будет потеряна в будущих версиях того же самого драгоценного камня, и версия не будет указана в Gemfile, все последующие установки этого драгоценного камня для разных людей или разных машин приведут к нежелательным эффектам.

Я сталкивалсяЭти проблемы, в частности, для версии-кандидата будут разбиты на 3 версии.

0 голосов
/ 25 сентября 2011

Я написал пост в блоге, учитывая все обсуждаемые вопросы.

Посмотрите здесь - http://rtdptech.com/2011/09/specifying-gem-versions-in-gemfile-for-rails-application/

...