Я хочу знать, должен ли я указывать версию 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