Можно ли связывать/устанавливать драгоценные камни из локального кеша?

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

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

cd /tmp/gems
gem install *.gem

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

cd /somedir/my_rails_project
bundle

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

Ответ 1

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

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

В качестве альтернативы вы можете настроить локальный репозиторий Git с помощью камней в нем и написать Gemfile следующим образом:

gem "gem1", :git    => "file:///tmp/gems",
            :branch => "gem1"

Ответ 2

bundle install --local должен быть тем, что вы хотите. Из bundle-install manpage:

--local
    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.

Ответ 3

Используйте

bundle package

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

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

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

Ответ 4

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

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

bundle install --without=development --quiet --path=cache