発生した問題
dockerの環境で、railsをbundle installしたらエラーに。
/app# bundle install
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Using rake 13.2.1
[省略]
Using activejob 7.0.8.7
--- ERROR REPORT TEMPLATE -------------------------------------------------------
NoMethodError: undefined method `size' for nil:NilClass
/usr/local/lib/ruby/3.2.0/rubygems/package/tar_reader/entry.rb:139:in `read'
/usr/local/lib/ruby/3.2.0/rubygems/package.rb:365:in `block in digest'
/usr/local/lib/ruby/3.2.0/rubygems/package.rb:362:in `each'
/usr/local/lib/ruby/3.2.0/rubygems/package.rb:362:in `digest'
/usr/local/lib/ruby/3.2.0/rubygems/package.rb:664:in `verify_entry'
/usr/local/lib/ruby/3.2.0/rubygems/package.rb:683:in `block in verify_files'
/usr/local/lib/ruby/3.2.0/rubygems/package/tar_reader.rb:65:in `each'
/usr/local/lib/ruby/3.2.0/rubygems/package.rb:682:in `verify_files'
/usr/local/lib/ruby/3.2.0/rubygems/package.rb:613:in `block (2 levels) in verify'
/usr/local/lib/ruby/3.2.0/rubygems/package/tar_reader.rb:27:in `new'
/usr/local/lib/ruby/3.2.0/rubygems/package.rb:610:in `block in verify'
/usr/local/lib/ruby/3.2.0/rubygems/package/file_source.rb:29:in `open'
/usr/local/lib/ruby/3.2.0/rubygems/package/file_source.rb:29:in `with_read_io'
/usr/local/lib/ruby/3.2.0/rubygems/package.rb:609:in `verify'
/usr/local/lib/ruby/3.2.0/rubygems/package.rb:590:in `spec'
/usr/local/lib/ruby/3.2.0/rubygems/installer.rb:287:in `spec'
/usr/local/lib/ruby/3.2.0/bundler/rubygems_gem_installer.rb:97:in `spec'
/usr/local/lib/ruby/3.2.0/bundler/source/rubygems.rb:183:in `install'
/usr/local/lib/ruby/3.2.0/bundler/installer/gem_installer.rb:54:in `install'
/usr/local/lib/ruby/3.2.0/bundler/installer/gem_installer.rb:16:in `install_from_spec'
/usr/local/lib/ruby/3.2.0/bundler/installer/parallel_installer.rb:155:in `do_install'
/usr/local/lib/ruby/3.2.0/bundler/installer/parallel_installer.rb:146:in `block in worker_pool'
/usr/local/lib/ruby/3.2.0/bundler/worker.rb:62:in `apply_func'
/usr/local/lib/ruby/3.2.0/bundler/worker.rb:57:in `block in process_queue'
/usr/local/lib/ruby/3.2.0/bundler/worker.rb:54:in `loop'
/usr/local/lib/ruby/3.2.0/bundler/worker.rb:54:in `process_queue'
/usr/local/lib/ruby/3.2.0/bundler/worker.rb:90:in `block (2 levels) in create_threads'
どうやら、Bundler が gem をインストールする際に .gem パッケージの展開・検証をしているときに発生しているようです。
試したこと
dockerのボリュームを消したり、イメージを消したりしましたが、解決せず。
キャッシュを消して、wifiをポケットwifiに繋ぎ変えたらbundle installができました。
rm -rf vendor/cache
rm -rf /usr/local/bundle/cache
NURO光の工事をしてから初めてbundle installしたので、原因はネットワークか?
って気づくのにめちゃくちゃ時間かかりました。
レアケースかもしれないですが、記事が見つからなかったので解決策を残します。
解決方法
1. MacのDNS設定を変更
System Preferences
(系統設定) -> Network
(ネットワーク) -> 接続中のWi-Fi -> Advanced
(詳細) -> DNS
設定したDNSサーバ
-
192.168.1.1
(NURO光ルータのローカルDNS) -
8.8.8.8
(Google Public DNS) -
8.8.4.4
(Google Public DNS)
変更前に記載されていたDNS
-
192.168.1.1
(NURO光ルータのローカルDNS) -
240d:f:xxxx:xxxx::xxxx
(NURO光のIPv6 DNSと思われる)
これを削除し、新しく 8.8.8.8
を追加しました。
2. bundle install
を再試行
DNS設定を変更した後、bundle install
を実行すると、正常にGemがインストールされました。
なぜこれで解決したのか
NURO光のデフォルトDNSがIPv6向けのものだったため、IPv4でのネットワーク接続に問題が起きていた可能性が高いらしいです。
8.8.8.8
や 8.8.4.4
を追加することでGoogleのパブリックDNSを利用し、IPv4のネットワークも正常に活用できるようになったと思われます。