Всегда ли "bundle install" перед "bundle exec"? - PullRequest
1 голос
/ 16 мая 2019

Какова лучшая практика, чтобы гарантировать, что зависимости установлены на узле сборки для любой сборки гема?

bundle exec завершится ошибкой, если некоторые из зависимостей еще не установлены.

Должен ли я делать

bundle install
bundle exec rake

на каждую сборку?

Или есть лучший способ?

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Скрипт bin/setup, который поставляется с рельсами, использует bundle check || bundle install в качестве шага перед курсором. Это может быть хорошим местом для начала.

Я использую bundle install --frozen на наших конвейерах; Frozen гарантирует, что в Gemfile.lock не произойдет никаких изменений. Мы используем кеш, поэтому я даже не беспокоюсь о шаге bundle check.

Если вы можете предоставить более подробную информацию о вашей настройке (docker? Kubernetes? Хост-провайдер?), Кто-то может порекомендовать стратегию кэширования для компоновщика, если вопрос задается во время установки комплекта.

Как правило, для конвейеров CI мы всегда запускаем bundle install --frozen в начале нашей сборки, даже если у нас настроен механизм кэширования. Я заметил, что в некоторых ситуациях исполняемые файлы не связываются автоматически при восстановлении кэша форм, поэтому это гарантирует, что все работает. Это не медленно, ни в коем случае; при кэшировании шаг bundle install --frozen занимает всего секунду или 2.

0 голосов
/ 16 мая 2019

Bundler обеспечивает согласованную среду для проектов Ruby, отслеживая и устанавливая точные гемы и версии, которые необходимы. Bundler гарантирует, что нужные вам камни присутствуют в разработке, подготовке и производстве.

Чтобы начать работу над проектом со всеми необходимыми гемами, запустите: bundle install

bundle exec - это команда Bundler для выполнения сценария в контексте текущего пакета (из Gemfile вашего каталога). Например, чтобы запустить команду миграции из текущего набора гемов, запустите:

bundle exec rake db:migrate - это сценарий, где db - это пространство имен, а migrate - это определенное имя задачи.

Надеюсь, это даст некоторые идеи.

...