Ah, it seems this happens on Ubuntu 24.04, without a Gemfile.lock, and when the Gemfile does not list the indirect dependencies.
I found three workarounds.
1. Add a Gemfile.lock
¶
If a proper Gemfile.lock is present, --prefer-local seems to avoid the installation.
$ ls
Gemfile Gemfile.lock
$ cat Gemfile
source "https://rubygems.org"
gem "net-imap"
gem "date", "3.3.3"
$ cat Gemfile.lock
GEM
remote: https://rubygems.org/
specs:
date (3.3.3)
net-imap (0.3.4.1)
date
net-protocol
net-protocol (0.2.1)
timeout
timeout (0.3.1)
PLATFORMS
x86_64-linux-gnu
DEPENDENCIES
date (= 3.3.3)
net-imap
BUNDLED WITH
2.4.20
$ bundle install --prefer-local
Bundle complete! 2 Gemfile dependencies, 5 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
2. List all dependencies in the Gemfile¶
If the Gemfile lists all dependencies, including the indirect ones, --prefer-local also seems to avoid the installation.
$ ls
Gemfile
$ cat Gemfile
source "https://rubygems.org"
gem "timeout"
gem "net-protocol"
gem "net-imap"
gem "date", "3.3.3"
$ bundle install --prefer-local
Resolving dependencies...
Bundle complete! 4 Gemfile dependencies, 5 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
3. Use bundler from a newer Ubuntu release¶
I think this behavior is a bug in the older version of bundler. With Ubuntu 25.10, it works well as expected, as shown below:
$ ls
Gemfile
$ cat Gemfile
source "https://rubygems.org"
gem "net-imap"
gem "date", "3.3.4"
$ bundle install --prefer-local
Fetching gem metadata from https://rubygems.org/...
Resolving dependencies...
Bundle complete! 2 Gemfile dependencies, 5 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.