是否可以缓存 gem,以便 bundle install
不会为每个构建安装一堆 gem ?每次构建都需要 5 分钟,这太多了。
我已将此添加到 circle.yml
配置:
dependencies:
cache_directories:
- "/home/ubuntu/.rvm/gems/ruby-2.1.2/gems/"
这是
bundle show gem_name
提供的公共(public)目录放置所有系统 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
因此,据我了解,它会恢复系统 gem 和安装到
vendor/bundle
中的 gem ,但是,我仍然看到这个(这需要很多时间):Installing rake 10.4.2
Installing i18n 0.7.0
Installing json 1.8.2
Installing minitest 5.5.1
...
代替
using rake 10.4.2
using i18n 0.7.0
using json 1.8.2
using minitest 5.5.1
...
所以,它似乎应该工作,但它没有。有什么问题?
最佳答案
解决方案很简单:CircleCI 默认运行一些命令,默认情况下也将 gem 缓存在 vendor/bundle
中。 ,因此无需向 cache_directories
添加任何内容.
在这些默认命令中是 bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3
,它会检查缓存目录中是否存在 gem,如果它们不存在则安装它们。
就我而言,我的项目由多个应用程序(主应用程序、通用 UI、API 客户端和 API 模拟)组成,分为 4 个不同的存储库。他们中的大多数需要bundle install
命令。
我唯一要做的就是更换我所有的bundle install
带有 bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3
的命令(总是安装 gems) .在这种情况下,所有 gem 仅在我第一次运行测试时安装,并且以下所有构建都使用以前缓存的 gem。
关于ruby-on-rails - CircleCI gem 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30666176/