Ruby on rails CircleCI宝石缓存
是否可以缓存gem,以便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_
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
...