Обязательно ли указывать версии Gem в Gemfile или нет для приложения rails

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

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

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

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

UPDATE -

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

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

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

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

Ответ 2

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

Ответ 3

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

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

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