Обычно мы пишем зависимости в Gemfile как:
gem "nokogiri", "~> 1.4.4"
gem 'bcrypt-ruby', '~> 3.0.0'
gem 'uglifier', '>= 1.2.3'
..
Здесь вы в основном говорите: « Я хочу нокогири, если он больше версии 1.4.4 » и т. Д. Теперь предположим, что я настроил Gemfile
8 месяцев назад и я успешно настроил приложение с этим требованием. 8 месяцев назад версия nokogiri была 1.4.4 . Мои приложения rails работали без проблем с этой версией.
Теперь подумайте, что я пытаюсь построить с тем же Gemfile
. Но если мы посмотрим на версии nokogiri , то увидим, что текущая стабильная версия изменилась на 1.4.9 . Это означает, что если мы попытаемся собрать, то bundler установит версию 1.4.9 nokogiri (предположим, у нас нет Gemfile.lock
).
Что это значит?
Как видите, если у вас нет Gemfile.lock
и выполните команду:
bundle install
затем используемые в настоящее время драгоценные камни могут отличаться в любое время . Ваше приложение использовало версию 1.4.4 , и оно работает 8 месяцев назад без каких-либо проблем, но если вы попытаетесь его построить сейчас , вы получите версию 1.4.9 . Может быть, он не работает с последней версией nokogiri
, потрясающая функция, которую вы использовали с 1.4.4 , больше недоступна и т. Д.
Для предотвращения подобных проблем используется Gemfile.lock
. В Gemfile.lock
записаны только точные версии , и, таким образом, будут установлены только они. Это означает, что если вы распространяете свое приложение с Gemfile.lock
, на каждой машине будут установлены одинаковые гемы, и самое важное , они все получат одинаковую версию . Это даст вам стабильный и общий стек развертывания.
Как создается Gemfile.lock?
Создается автоматически с первым:
bundle install
команда. После этого каждый раз, когда вы запускаете bundle install
, bundle сначала ищет Gemfile.lock
и устанавливает указанные там гемы. Это привычка распространять этот файл среди ваших проектов, чтобы обеспечить стабильность и стабильность.
Как обновить Gemfile.lock?
Если вы довольны последней версией своих приложений, вы можете обновить Gemfile.lock
. Просто отразите ваши изменения в Gemfile
. Это означает изменение зависимостей на новые точные версии в Gemfile
. После этого запустите:
bundle install
Это обновит вас Gemfile.lock
с вашей последней версией приложений.