TL; DR
Так, використовуйте песимістичний замок ( ~>
) і вкажіть семантичну версію до патчу ( Major.minor.patch
) на всіх своїх дорогоцінних каменях!
Обговорення
Я здивований недостатньою ясністю щодо цього питання, навіть "експерти галузі" днями сказали мені, що Gemfile.lock
існує для підтримки версій самоцвітів. Неправильно!
Ви хочете організувати свій Gemfile
спосіб таким чином, щоб ви могли бігати bundle update
будь-коли, не ризикуючи зламати все. Щоб досягти цього:
Вкажіть версію на рівні патча для всіх ваших дорогоцінних каменів з песимістичним блокуванням. Це дозволить bundle update
отримувати виправлення, але не порушувати зміни.
Вкажіть ref
для gems від git
Єдиним недоліком цієї установки є те, що коли виходить солодка нова мінорна / мажорна версія для дорогоцінного каміння, вам доведеться піднімати версію вручну.
Сценарій попередження
Поміркуйте, що станеться, якщо ви не заблокуєте свої дорогоцінні камені.
У вас є розблокований gem "rails"
в вашому Gemfile і версії в Gemfile.lock
IS 4.1.16
. Ви кодуєте, і в якийсь момент ви робите a bundle update
. Тепер ваша версія Rails переходить до 5.2.0
(за умови, що інший камінь не заважає цьому) і все ламається.
Зробіть собі послугу і не дозволяйте цього жодному самоцвіту!
Приклад Gemfile
if (version = Gem::Version.new(Bundler::VERSION)) < Gem::Version.new('1.16.3')
abort "Bundler version >= 1.16.3 is required. You are running #{version}"
end
source "http://rubygems.org"
gem "entity_validator",
git: "https://github.com/plataformatec/devise",
ref: "acc45c5a44c45b252ccba65fd169a45af73ff369"
gem "rails", "5.1.5"
gem "newrelic_rpm", "~> 4.8.0"
gem "puma", "~> 3.12.0"
group :test do
gem "simplecov", "~> 0.16.1", require: false
end
Поступка
Якщо ви впевнені, що ваші тести виявлять помилки, спричинені зміною версії дорогоцінного каменя, ви можете спробувати песимістично заблоковані дорогоцінні камені на другорядній версії, а не на виправлення.
Це дозволить збільшити версію дорогоцінного каменя в межах зазначеної основної версії, але ніколи не перейти до наступної.
gem "puma", "~> 3.12"