ruby-on-rails - CircleCI gem 缓存

标签 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 提供的公共(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/

相关文章:

ruby-on-rails - 如何将电子邮件地址放入 Rails 的 url 中

ruby-on-rails - Rails 复制了资源中的参数

ruby - 通过 cron 执行 ruby​​ gem

ruby-on-rails-3 - 无需重启服务器即可编辑 rails gem

ruby-on-rails - 使用 Ransack 搜索值数组

javascript - 在 Jquery 中渲染图像抛出 500(内部服务器错误)

ruby - ruby 中的 "require if"

ruby - 特拉维斯报告损坏的 Gemfile.lock 的奇怪消息

ruby-on-rails - 用于 Rails 4 的 mobile_fu

ruby - 无法安装 JSON gem