After the required/recommended upgrade from Focal to Noble build image, my build times have doubled, and that largely seems to be down to the fact that on the Noble image, the ruby version is re-installed with each new commit.
I have been unable to figure out how to ensure the ruby is cached - docs and the chatbot have just confirmed the issue without offering a solution. Either I’m missing an important configuration detail, or there seems to be an issue with ruby caching on the new image - hoping someone can help me figure out how to resolve this (aside from anything else, it has almost doubled my monthly build quota).
Note:
-
The build cache is restored successfully.
-
Gems are cached correctly.
-
Only the Ruby version itself is rebuilt each time.
-
The behaviour changed after moving from Focal 20.04 to Noble 24.04.
I also note that with the Noble image, the docs don’t list exactly which Ruby patch versions are preinstalled, only that the default is “3.x” and any official version can be installed. But the Ruby dependency documentation does claim that “If the version you select is preinstalled in your site’s selected build image, it will be available immediately. If not, your selected version will be installed using rvm and then cached to speed up subsequent builds.” It is the last bit about “then cached to speed up subsequent builds” that does not appear to be working correctly.
I have the same issue on 4 separate projects that all use the same jekyll-based site build: codingkata-tardate-com, leap-tardate-com, modelart-tardate-com, blog-tardate-com.
Specific build examples:
Focal 20.04 Jan 1 Build time: 51s. Total deploy time: 51s
https://app.netlify.com/projects/codingkata-tardate-com/deploys/695651de862ccb00086b18e9
Build started at 6:52:17 PM and ended at 6:53:08 PM
6:52:15 PM: Build ready to start
6:52:17 PM: build-image version: 235a96ed6c11cbdf942eed7e70e6802956f9b464 (focal)
6:52:17 PM: buildbot version: 4eb552cf97517bc57f136e719a1cf73a7f3cefbb
6:52:17 PM: Fetching cached dependencies
6:52:17 PM: Starting to download cache of 554.1MB (Last modified: 2025-12-31 07:55:06 +0000 UTC)
6:52:18 PM: Finished downloading cache in 1.114s
6:52:18 PM: Starting to extract cache
6:52:24 PM: Finished extracting cache in 6.083s
6:52:24 PM: Finished fetching cache in 7.294s
6:52:24 PM: Starting to prepare the repo for build
6:52:25 PM: Preparing Git Reference pull/327/head
6:52:28 PM: Starting to install dependencies
6:52:29 PM: Started restoring cached mise cache
6:52:30 PM: Finished restoring cached mise cache
6:52:30 PM: mise WARN deprecated [idiomatic_version_file_enable_tools]:
6:52:30 PM: Idiomatic version files like /opt/build/repo/.ruby-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.
6:52:30 PM: You can remove this warning by explicitly enabling idiomatic version files for ruby with:
6:52:30 PM: mise settings add idiomatic_version_file_enable_tools ruby
6:52:30 PM: You can disable idiomatic version files with:
6:52:30 PM: mise settings add idiomatic_version_file_enable_tools “
”
6:52:30 PM: See https://github.com/jdx/mise/discussions/4345 for more information.
6:52:31 PM: mise python@3.13.11 install
6:52:31 PM: mise python@3.13.11 download cpython-3.13.11+20251217-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz
6:52:31 PM: mise python@3.13.11 extract cpython-3.13.11+20251217-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz
6:52:32 PM: mise python@3.13.11 python --version
6:52:32 PM: mise python@3.13.11 Python 3.13.11
6:52:32 PM: mise python@3.13.11 ✓ installed
6:52:32 PM: Python version set to 3.13
6:52:32 PM: mise WARN deprecated [idiomatic_version_file_enable_tools]:
6:52:32 PM: Idiomatic version files like /opt/build/repo/.ruby-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.
6:52:32 PM: You can remove this warning by explicitly enabling idiomatic version files for ruby with:
6:52:32 PM: mise settings add idiomatic_version_file_enable_tools ruby
6:52:32 PM: You can disable idiomatic version files with:
6:52:32 PM: mise settings add idiomatic_version_file_enable_tools “
”
6:52:32 PM: See https://github.com/jdx/mise/discussions/4345 for more information.
6:52:34 PM: Collecting pipenv
6:52:34 PM: Downloading pipenv-2026.0.3-py3-none-any.whl.metadata (17 kB)
6:52:34 PM: Collecting certifi (from pipenv)
6:52:34 PM: Downloading certifi-2025.11.12-py3-none-any.whl.metadata (2.5 kB)
6:52:34 PM: Collecting packaging>=22 (from pipenv)
6:52:34 PM: Downloading packaging-25.0-py3-none-any.whl.metadata (3.3 kB)
6:52:34 PM: Collecting setuptools>=67 (from pipenv)
6:52:34 PM: Downloading setuptools-80.9.0-py3-none-any.whl.metadata (6.6 kB)
6:52:34 PM: Collecting virtualenv>=20.24.2 (from pipenv)
6:52:34 PM: Downloading virtualenv-20.35.4-py3-none-any.whl.metadata (4.6 kB)
6:52:34 PM: Collecting distlib<1,>=0.3.7 (from virtualenv>=20.24.2->pipenv)
6:52:34 PM: Downloading distlib-0.4.0-py2.py3-none-any.whl.metadata (5.2 kB)
6:52:34 PM: Collecting filelock<4,>=3.12.2 (from virtualenv>=20.24.2->pipenv)
6:52:34 PM: Downloading filelock-3.20.1-py3-none-any.whl.metadata (2.1 kB)
6:52:34 PM: Collecting platformdirs<5,>=3.9.1 (from virtualenv>=20.24.2->pipenv)
6:52:34 PM: Downloading platformdirs-4.5.1-py3-none-any.whl.metadata (12 kB)
6:52:34 PM: Downloading pipenv-2026.0.3-py3-none-any.whl (2.4 MB)
6:52:34 PM: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 57.8 MB/s 0:00:00
6:52:34 PM: Downloading packaging-25.0-py3-none-any.whl (66 kB)
6:52:34 PM: Downloading setuptools-80.9.0-py3-none-any.whl (1.2 MB)
6:52:34 PM: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 72.4 MB/s 0:00:00
6:52:34 PM: Downloading virtualenv-20.35.4-py3-none-any.whl (6.0 MB)
6:52:34 PM: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.0/6.0 MB 160.5 MB/s 0:00:00
6:52:34 PM: Downloading distlib-0.4.0-py2.py3-none-any.whl (469 kB)
6:52:35 PM: Downloading filelock-3.20.1-py3-none-any.whl (16 kB)
6:52:35 PM: Downloading platformdirs-4.5.1-py3-none-any.whl (18 kB)
6:52:35 PM: Downloading certifi-2025.11.12-py3-none-any.whl (159 kB)
6:52:35 PM: Installing collected packages: distlib, setuptools, platformdirs, packaging, filelock, certifi, virtualenv, pipenv
6:52:37 PM: Successfully installed certifi-2025.11.12 distlib-0.4.0 filelock-3.20.1 packaging-25.0 pipenv-2026.0.3 platformdirs-4.5.1 setuptools-80.9.0 virtualenv-20.35.4
6:52:37 PM: mise WARN deprecated [idiomatic_version_file_enable_tools]:
6:52:37 PM: Idiomatic version files like /opt/build/repo/.ruby-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.
6:52:37 PM: You can remove this warning by explicitly enabling idiomatic version files for ruby with:
6:52:37 PM: mise settings add idiomatic_version_file_enable_tools ruby
6:52:37 PM: You can disable idiomatic version files with:
6:52:37 PM: mise settings add idiomatic_version_file_enable_tools “
”
6:52:37 PM: See https://github.com/jdx/mise/discussions/4345 for more information.
6:52:38 PM: Required ruby-3.3.6 is not installed.
6:52:38 PM: To install do: ‘rvm install “ruby-3.3.6”’
6:52:38 PM: Attempting Ruby version 3.3.6, read from .ruby-version file
6:52:38 PM: Started restoring cached Ruby version
6:52:38 PM: Finished restoring cached Ruby version
6:52:39 PM: Using Ruby version 3.3.6
6:52:39 PM: Started restoring cached ruby gems
6:52:39 PM: Finished restoring cached ruby gems
6:52:39 PM: Installing gem bundle
6:52:40 PM: [DEPRECATED] The --path flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use bundle config set path '/opt/build/cache/bundle', and stop using this flag
6:52:40 PM: [DEPRECATED] The --binstubs option will be removed in favor of bundle binstubs --all
6:52:42 PM: Fetching gem metadata from https://rubygems.org/…
6:52:42 PM: Resolving dependencies…
6:52:42 PM: Fetching rouge 4.7.0
6:52:43 PM: Installing rouge 4.7.0
6:52:43 PM: Bundle complete! 9 Gemfile dependencies, 36 gems now installed.
6:52:43 PM: Bundled gems are installed into /opt/build/cache/bundle
6:52:43 PM: Gem bundle installed
6:52:43 PM: mise WARN deprecated [idiomatic_version_file_enable_tools]:
6:52:43 PM: Idiomatic version files like /opt/build/repo/.ruby-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.
6:52:43 PM: You can remove this warning by explicitly enabling idiomatic version files for ruby with:
6:52:43 PM: mise settings add idiomatic_version_file_enable_tools ruby
6:52:43 PM: You can disable idiomatic version files with:
6:52:43 PM: mise settings add idiomatic_version_file_enable_tools “
”
6:52:43 PM: See https://github.com/jdx/mise/discussions/4345 for more information.
6:52:43 PM: ruby-3.3.6 - #gemset created /opt/buildhome/.rvm/gems/ruby-3.3.6@lck
6:52:44 PM: ruby-3.3.6 - #generating lck wrappers…
6:52:44 PM: Started restoring cached go cache
6:52:44 PM: Finished restoring cached go cache
6:52:44 PM: go version go1.19.13 linux/amd64
6:52:44 PM: mise WARN deprecated [idiomatic_version_file_enable_tools]:
6:52:44 PM: Idiomatic version files like /opt/build/repo/.ruby-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.
6:52:44 PM: You can remove this warning by explicitly enabling idiomatic version files for ruby with:
6:52:44 PM: mise settings add idiomatic_version_file_enable_tools ruby
6:52:44 PM: You can disable idiomatic version files with:
6:52:44 PM: mise settings add idiomatic_version_file_enable_tools “
”
6:52:44 PM: See https://github.com/jdx/mise/discussions/4345 for more information.
6:52:44 PM: mise WARN deprecated [idiomatic_version_file_enable_tools]:
6:52:44 PM: Idiomatic version files like /opt/build/repo/.ruby-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.
6:52:44 PM: You can remove this warning by explicitly enabling idiomatic version files for ruby with:
6:52:44 PM: mise settings add idiomatic_version_file_enable_tools ruby
6:52:44 PM: You can disable idiomatic version files with:
6:52:44 PM: mise settings add idiomatic_version_file_enable_tools “
”
6:52:44 PM: See https://github.com/jdx/mise/discussions/4345 for more information.
6:52:45 PM: mise WARN deprecated [idiomatic_version_file_enable_tools]:
6:52:45 PM: Idiomatic version files like /opt/build/repo/.ruby-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.
6:52:45 PM: You can remove this warning by explicitly enabling idiomatic version files for ruby with:
6:52:45 PM: mise settings add idiomatic_version_file_enable_tools ruby
6:52:45 PM: You can disable idiomatic version files with:
6:52:45 PM: mise settings add idiomatic_version_file_enable_tools “
”
6:52:45 PM: See https://github.com/jdx/mise/discussions/4345 for more information.
6:52:45 PM: mise WARN deprecated [idiomatic_version_file_enable_tools]:
6:52:45 PM: Idiomatic version files like /opt/build/repo/.ruby-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.
6:52:45 PM: You can remove this warning by explicitly enabling idiomatic version files for ruby with:
6:52:45 PM: mise settings add idiomatic_version_file_enable_tools ruby
6:52:45 PM: You can disable idiomatic version files with:
6:52:45 PM: mise settings add idiomatic_version_file_enable_tools “
”
6:52:45 PM: See https://github.com/jdx/mise/discussions/4345 for more information.
6:52:45 PM: Using PHP version 8.0
6:52:45 PM: mise WARN deprecated [idiomatic_version_file_enable_tools]:
6:52:45 PM: Idiomatic version files like /opt/build/repo/.ruby-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.
6:52:45 PM: You can remove this warning by explicitly enabling idiomatic version files for ruby with:
6:52:45 PM: mise settings add idiomatic_version_file_enable_tools ruby
6:52:45 PM: You can disable idiomatic version files with:
6:52:45 PM: mise settings add idiomatic_version_file_enable_tools “
”
6:52:45 PM: See https://github.com/jdx/mise/discussions/4345 for more information.
6:52:45 PM: mise WARN deprecated [idiomatic_version_file_enable_tools]:
6:52:45 PM: Idiomatic version files like /opt/build/repo/.ruby-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.
6:52:45 PM: You can remove this warning by explicitly enabling idiomatic version files for ruby with:
6:52:45 PM: mise settings add idiomatic_version_file_enable_tools ruby
6:52:45 PM: You can disable idiomatic version files with:
6:52:45 PM: mise settings add idiomatic_version_file_enable_tools “
”
6:52:45 PM: See https://github.com/jdx/mise/discussions/4345 for more information.
6:52:45 PM: mise WARN deprecated [idiomatic_version_file_enable_tools]:
6:52:45 PM: Idiomatic version files like /opt/build/repo/.ruby-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.
6:52:45 PM: You can remove this warning by explicitly enabling idiomatic version files for ruby with:
6:52:45 PM: mise settings add idiomatic_version_file_enable_tools ruby
6:52:45 PM: You can disable idiomatic version files with:
6:52:45 PM: mise settings add idiomatic_version_file_enable_tools “
”
6:52:45 PM: See https://github.com/jdx/mise/discussions/4345 for more information.
6:52:46 PM: mise WARN deprecated [idiomatic_version_file_enable_tools]:
6:52:46 PM: Idiomatic version files like /opt/build/repo/.ruby-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.
6:52:46 PM: You can remove this warning by explicitly enabling idiomatic version files for ruby with:
6:52:46 PM: mise settings add idiomatic_version_file_enable_tools ruby
6:52:46 PM: You can disable idiomatic version files with:
6:52:46 PM: mise settings add idiomatic_version_file_enable_tools “
”
6:52:46 PM: See https://github.com/jdx/mise/discussions/4345 for more information.
6:52:46 PM: mise WARN deprecated [idiomatic_version_file_enable_tools]:
6:52:46 PM: Idiomatic version files like /opt/build/repo/.ruby-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.
6:52:46 PM: You can remove this warning by explicitly enabling idiomatic version files for ruby with:
6:52:46 PM: mise settings add idiomatic_version_file_enable_tools ruby
6:52:46 PM: You can disable idiomatic version files with:
6:52:46 PM: mise settings add idiomatic_version_file_enable_tools “
”
6:52:46 PM: See https://github.com/jdx/mise/discussions/4345 for more information.
6:52:46 PM: Started restoring cached Node.js version
6:52:48 PM: Finished restoring cached Node.js version
6:52:49 PM: v20.19.6 is already installed.
6:52:49 PM: Now using node v20.19.6 (npm v10.8.2)
6:52:49 PM: Enabling Node.js Corepack
6:52:49 PM: Started restoring cached build plugins
6:52:49 PM: Finished restoring cached build plugins
6:52:50 PM: Successfully installed dependencies
6:52:50 PM: Detected 1 framework(s)
6:52:50 PM: “jekyll” at version “unknown”
6:52:50 PM: Starting build script
6:52:50 PM: mise WARN deprecated [idiomatic_version_file_enable_tools]:
6:52:50 PM: Idiomatic version files like /opt/build/repo/.ruby-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.
6:52:50 PM: You can remove this warning by explicitly enabling idiomatic version files for ruby with:
6:52:50 PM: mise settings add idiomatic_version_file_enable_tools ruby
6:52:50 PM: You can disable idiomatic version files with:
6:52:50 PM: mise settings add idiomatic_version_file_enable_tools “
”
6:52:50 PM: See https://github.com/jdx/mise/discussions/4345 for more information.
6:52:51 PM: mise WARN deprecated [idiomatic_version_file_enable_tools]:
6:52:51 PM: Idiomatic version files like /opt/build/repo/.ruby-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.
6:52:51 PM: You can remove this warning by explicitly enabling idiomatic version files for ruby with:
6:52:51 PM: mise settings add idiomatic_version_file_enable_tools ruby
6:52:51 PM: You can disable idiomatic version files with:
6:52:51 PM: mise settings add idiomatic_version_file_enable_tools “
”
6:52:51 PM: See https://github.com/jdx/mise/discussions/4345 for more information.
6:52:51 PM: Section completed: initializing
Noble 24.04 Jan 26 Build time: 3m 17s. Total deploy time: 3m 17s
https://app.netlify.com/projects/codingkata-tardate-com/deploys/697692d7ade0df00096e5720
6:02:00 AM: build-image version: d51fd32053fcc0da4148dc46bb6db7c33c7d9b1f (noble-new-builds)
6:02:00 AM: buildbot version: 09de83776575b998a6482cc1cc9e332db896a036
6:02:01 AM: Fetching cached dependencies
6:02:01 AM: Starting to download cache of 357.0MB (Last modified: 2026-01-25 14:18:29 +0000 UTC)
6:02:01 AM: Finished downloading cache in 864ms
6:02:01 AM: Starting to extract cache
6:02:02 AM: Finished extracting cache in 930ms
6:02:02 AM: Finished fetching cache in 1.887s
6:02:02 AM: Starting to prepare the repo for build
6:02:03 AM: Preparing Git Reference refs/heads/main
6:02:05 AM: Starting to install dependencies
6:02:05 AM: mise ~/.config/mise/config.toml tools: python@3.14.2
6:02:05 AM: Attempting Ruby version 3.3.10, read from .ruby-version file
6:02:05 AM: mise ruby@3.3.10 install
6:02:05 AM: mise ruby@3.3.10 ruby-build
6:02:05 AM: mise ruby@3.3.10 ==> Downloading ruby-3.3.10.tar.gz...
6:02:05 AM: mise ruby@3.3.10 -> curl -q -fL -o ruby-3.3.10.tar.gz <https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.10.tar.gz>
6:02:05 AM: % Total % Received % Xferd Average Speed Time Time Time Current
6:02:05 AM: Dload Upload Total Spent Left Speed
6:02:06 AM: 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
6:02:06 AM: 100 21.2M 100 21.2M 0 0 100M 0 --:--:-- --:--:-- --:--:-- 100M
6:02:06 AM: mise ruby@3.3.10 ==> Installing ruby-3.3.10...
6:02:06 AM: mise ruby@3.3.10 -> ./configure "--prefix=$HOME/.local/share/mise/installs/ruby/3.3.10" --enable-shared --with-ext=openssl,psych,+
6:02:29 AM: mise ruby@3.3.10 -> make -j 3
6:04:34 AM: mise ruby@3.3.10 -> make install
6:05:03 AM: mise ruby@3.3.10 ==> Installed ruby-3.3.10 to /opt/buildhome/.local/share/mise/installs/ruby/3.3.10
6:05:03 AM: mise ruby@3.3.10 ✓ installed
6:05:03 AM: Ruby version set to 3.3.10
6:05:03 AM: Started restoring cached ruby gems
6:05:03 AM: Finished restoring cached ruby gems
6:05:03 AM: Installing gem bundle
6:05:04 AM: [DEPRECATED] The --binstubs option will be removed in favor of `bundle binstubs --all`
6:05:06 AM: Fetching gem metadata from <https://rubygems.org/>...........
6:05:06 AM: Resolving dependencies...
6:05:06 AM: Bundle complete! 9 Gemfile dependencies, 37 gems now installed.
6:05:06 AM: Bundled gems are installed into `/opt/build/cache/bundle`
6:05:06 AM: Gem bundle installed
6:05:06 AM: mise ~/.config/mise/config.toml tools: go@1.25.6
6:05:06 AM: v22.22.0 is already installed.
6:05:07 AM: Now using node v22.22.0 (npm v10.9.4)
6:05:07 AM: Enabling Node.js Corepack
6:05:07 AM: Started restoring cached build plugins
6:05:07 AM: Finished restoring cached build plugins
6:05:07 AM: Successfully installed dependencies
6:05:07 AM: Detected 1 framework(s)
6:05:07 AM: "jekyll" at version "unknown"
6:05:07 AM: Starting build script
6:05:08 AM: Section completed: initializing
All recent builds after the image upgrade are the same.
e.g. prior build https://app.netlify.com/projects/codingkata-tardate-com/deploys/6976255c3749720008a66f9f also Installed ruby-3.3.10 to /opt/buildhome/.local/share/mise/installs/ruby/3.3.10 but gems restored from cache to /opt/build/cache/bundle