Должен ли я установить явные версии в Gemfile? - PullRequest
1 голос
/ 24 мая 2019

Я привык определять гемфайлы с помощью простых команд, таких как gem 'devise'.Сейчас я запускаю мое приложение через докеризованный контейнер на AWS вместе с конвейером, который извлекает и создает новые контейнеры на основе проталкиваний в мою основную ветку на Git.Это означает, что каждый раз, когда я нажимаю новую версию, AWS будет перестраивать все приложение с нуля, а также устанавливать все последние версии гемов.

У меня есть некоторые опасения относительно того, что произойдет, когда появятся новые версии.драгоценных камней.Это, конечно, может означать, что мой код может перестать работать, если включенные самоцветы изменят свое поведение или методы.

Какова лучшая практика в этом случае?Должен ли я начать явно определять, какие версии Gems я хочу?И если да, то как мне получить прибыль от предоставленных исправлений?

Я рассматриваю определение всех моих драгоценных камней следующим образом:

gem 'devise', '~> 4.6.0'
# Or
gem 'devise', '~> 4.6'

Что бысамое гибкое, но "гарантирующее", что я не столкнусь с какими-либо проблемами в долгосрочной перспективе?

1 Ответ

2 голосов
/ 24 мая 2019

Неожиданные изменения версий обычно должны предотвращаться с помощью Gemfile.lock, который содержит точные версии, которые были в последний раз установлены / обновлены, зафиксирован вместе с gemfile и может использоваться для обеспечения того, чтобы производство могло быть построено каждый раз точно так же. Сначала я выясню, почему ваш конвейер сборки не использует его.

Даже если у вас есть CI и хорошее покрытие тестами, которое предотвратит срыв производства, гораздо лучше быть уверенным, что что-то сломалось не из-за ваших изменений, а из-за обновления гема. Таким образом, обновления gem, даже для минорных и патч-версий, должны выполняться отдельными коммитами.

Что касается версий в самом gemfile - вы должны указывать зависимости версий в соответствии с политикой версий этого конкретного gem (даже при использовании файла блокировки). Большинство драгоценных камней используют семантическое управление версиями , так что гем не должен нарушать ничего в пределах одной основной версии (опция ~>4.6), а обновления не должны требовать серьезных изменений в вашем приложении (но в любом случае могут быть устаревшие версии, которые заполняют ваш журнал или некоторые регрессии, так что в любом случае лучше протестировать версию перед выпуском).

Чтобы оставаться в курсе о новых версиях зависимостей - периодически запускайте bundle outdated, чтобы увидеть, какие есть обновления для гемов.

...