Можно ли связывать / устанавливать драгоценные камни из локального кэша? - PullRequest
13 голосов
/ 20 декабря 2011

У меня на компьютере куча драгоценных камней, которые я хочу использовать в рецепте шеф-повара.

Я знаю, что их можно поместить в каталог вроде / tmp / gems и просто:

cd /tmp/gems
gem install *.gem

Можно ли поместить все драгоценные камни в один каталог, где я могу установить их вместе с упаковщиком, не загружая их снова?

cd /somedir/my_rails_project
bundle

Я хочу сохранить пропускную способность.

Ответы [ 5 ]

28 голосов
/ 23 декабря 2011

bundle install --local должно быть то, что вы хотите.Из справочной страницы bundle-install :

<strong>--local</strong>
    Do not attempt to connect to rubygems.org, instead using just the 
    gems located in vendor/cache. Note that if a more appropriate 
    platform-specific gem exists on rubygems.org, this will bypass 
    the normal lookup.
5 голосов
/ 20 декабря 2011

Вы можете добавить локальные каталоги в свой Gemfile (пример из документации):

gem "nokogiri", :path => "~/sw/gems/nokogiri"

В качестве альтернативы, вы можете настроить локальный репозиторий Git с гемами в нем и написатьGemfile, как это:

gem "gem1", :git    => "file:///tmp/gems",
            :branch => "gem1"
4 голосов
/ 22 апреля 2016

Использовать

bundle package

Блокирует и затем кэширует драгоценные камни в ./vendor/cache.

Команда package скопирует файлы .gem для ваших драгоценных камней в комплекте.в ./vendor/cache.После этого, когда вы запустите установку пакета, Bundler будет использовать драгоценные камни в кеше, а не на rubygems.org.

http://bundler.io/v1.6/bundle_package.html

1 голос
/ 23 августа 2017

Если вы хотите использовать локальный кэш с целью ускорения bundle install в CI, например, когда для запуска тестов используется док-контейнер, вы можете использовать --path.При этом будут использоваться гемы по указанному пути, если они не представлены, в противном случае они будут загружены в это местоположение.

Это предполагает, что сборка CI может монтировать постоянный том внутри контейнера докера.Так, например, если на машине CI есть каталог /var/cache/drone, который можно смонтировать в контейнере Docker как ./cache, тогда вы можете сделать:

bundle install --without=development --quiet --path=cache
0 голосов
/ 27 августа 2018

Вы можете использовать конфигурационный ключ BUNDLE_CACHE_PATH:

cache_path (BUNDLE_CACHE_PATH): каталог, в который упаковщик будет помещать кэшированные гемы при запуске bundle package, и этот упаковщик будет искать при установке гемов. По умолчанию vendor/bundle.

Источник: https://bundler.io/v1.16/bundle_config.html#LIST-OF-AVAILABLE-KEYS

В GitLab CI я определил это значение в среде бегунов: "BUNDLE_CACHE_PATH=/cache-ci/bundle", этот каталог автоматически монтируется в бегунах CI.

Затем bundle install установит гемы из каталога кеша (как только кеш будет заполнен).

...