Ruby on rails CircleCI宝石缓存

Ruby on rails CircleCI宝石缓存,ruby-on-rails,gem,bundler,circleci,Ruby On Rails,Gem,Bundler,Circleci,是否可以缓存gem,以便bundle install不会为每个构建安装gem?每次构建都需要5分钟,这太多了 我已将其添加到circle.yml配置中: dependencies: cache_directories: - "/home/ubuntu/.rvm/gems/ruby-2.1.2/gems/" 这是由bundle show gem_name提供的公共目录,其中放置了所有系统gem 此添加系统写入此日志后: restoring cache v4/company/repo_

是否可以缓存gem,以便
bundle install
不会为每个构建安装gem?每次构建都需要5分钟,这太多了

我已将其添加到
circle.yml
配置中:

dependencies:
  cache_directories:
    - "/home/ubuntu/.rvm/gems/ruby-2.1.2/gems/"
这是由
bundle show gem_name
提供的公共目录,其中放置了所有系统gem

此添加系统写入此日志后:

restoring cache v4/company/repo_name/dependency/circle-ci/42/mGWhlYQIxyOy0GZtt4QmCw__.tar.gz
restoring home/ubuntu/repo_name/vendor/bundle, home/ubuntu/.m2, home/ubuntu/.ivy2, home/ubuntu/.go_workspace, home/ubuntu/.gradle, home/ubuntu/.rvm/gems/ruby-2.1.2/gems
因此,据我所知,它可以恢复系统gems和安装到
供应商/捆绑包中的gems,但是,我仍然看到这一点(这需要很多时间):

而不是

using rake 10.4.2
using i18n 0.7.0
using json 1.8.2
using minitest 5.5.1
...

因此,它似乎应该起作用,但事实并非如此。有什么问题吗?

解决方案很简单:CircleCI默认运行一些命令,默认情况下也会在
供应商/捆绑包中缓存gems
,因此无需向
缓存目录添加任何内容

在这些默认命令中有
bundle check--path=vendor/bundle | | bundle install--path=vendor/bundle--jobs=4--retry=3
,它检查缓存目录中是否存在gem,如果没有gem,则进行安装

在我的例子中,我将由多个应用程序(主应用程序、公共UI、API客户端和API模拟)组成的项目拆分为4个不同的repo。他们中的大多数人需要
捆绑安装
命令


我唯一要做的就是用
bundle-check--path=vendor/bundle | | bundle-install--path=vendor/bundle--jobs=4--retry=3替换我所有的
bundle-install
命令(总是安装gems)。在这种情况下,所有gems仅在我第一次运行测试时安装,并且以下所有构建都使用以前缓存的gems。

我已经找到了解决方案。我可以问一下你找到的解决方案吗?谢谢。我刚刚补充了答案。我不明白这个答案。我的
circle.yml
文件不包含
bundle install
命令,因此如何替换它?@PeterH.Boling我假设在这种情况下,您的circle.yml文件正在运行推断的命令,并且您没有覆盖它们。。指定一个覆盖,它将在推断的命令上使用该覆盖。除了作为本机扩展的gems之外,似乎可以工作。如果有人看到这篇文章,我在中使用了此配置
using rake 10.4.2
using i18n 0.7.0
using json 1.8.2
using minitest 5.5.1
...