【问题标题】:Heroku CI Pipeline - Caching gems between buildsHeroku CI Pipeline - 在构建之间缓存 gem
【发布时间】:2020-07-18 02:26:36
【问题描述】:

我刚刚在 Heroku 上设置了一个 Ruby on Rails 应用程序,但是,我遇到了 CI 设置性能问题,这很烦人。

在设置单元测试期间,Heroku 总是重新安装我们的 gem,生成如下日志:

Fetching activestorage 6.0.2.2
Installing activestorage 6.0.2.2

在设置我们的应用程序时不是这种情况,因为它会显示这样的行:

Using activestorage 6.0.2.2

在这两种情况下,bundler 看起来都是用正确的参数调用的:

(用于 CI 设置)

Running: bundle install --without development --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment

(用于应用程序设置)

Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment

在这两种情况下,我们都有一行:

Bundled gems are installed into `./vendor/bundle`

所以,我想知道:你知道为什么 Heroku 不会在 CI 测试设置之间缓存 gem,而在后续构建我们的应用程序时会出现这种情况吗? 如果是,有没有办法强制重用之前安装在我们的 CI 管道中的 gem? 这需要很多时间,并且可以从中受益。

非常感谢

【问题讨论】:

  • 你的测试通过了吗?
  • 您好,是的,只是设置速度慢

标签: ruby-on-rails ruby heroku rubygems


【解决方案1】:

在询问 Heroku 的团队后,这是 ruby​​ 的 buildpack 中的一个错误。 现在已修复此问题,并且运行良好。 Buildpack 创建者可以在 CI 构建之间缓存数据,它只是在一次升级期间被关闭。

【讨论】:

【解决方案2】:

Heroku 不会在 CI 测试设置之间缓存 gem

Heroku 文件系统是一个ephemeral 文件系统。当您运行测试时,测功机会使用全新的操作系统启动。然后 heroku 安装所有依赖项并开始测试。

我认为这是所有 CI 平台的常见场景。每次我们运行测试时,它们都会通过安装所有依赖项来启动一个新环境。

这样做的一个理由可能是测试会在不同级别上更改大量数据。所以 CI 提供者从头开始,这样之前的测试残留数据就不会干扰当前的运行。

【讨论】:

    猜你喜欢
    • 2016-08-27
    • 2020-01-04
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 2017-03-18
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多