To update to the latest version installed on your system, run `bundle update --bundler`.

記事
IT・テクノロジー
深夜、ひとり残されたコンピュータールームで私はいつも通り作業をしていた。私はいつものようにコマンドを入力して、プログラムを動かそうとした。

しかし、何かが違う。画面には突如として奇妙な行が現れ、それが私の注意を引く。まるで、誰かが私のプログラムに介入しているような気配が漂っていた。戸惑いながらも、私はその不可解な行を削除しようとするが、何度やってみてもそれは見事に再現されるのだ。どんなに修正しても、画面は元のエラーメッセージが表示された状態に戻り、私の手による修正は無力だった。

不気味な静寂が部屋を支配し、私は冷や汗を流しながら、この奇妙な現象に立ち向かう覚悟を決めたのだった。

プログラミング中のエラーメッセージ…怖いですよね
今回はそんな私が経験した恐怖体験について話そうと思います。

サーバーに Rails のソースコードを取得して、いつもの通り rails s コマンドで起動しようとしたら、以下のようなエラーメッセージに遭遇しました。

$ rails s -b 0.0.0.0
/home/ec2-user/.rbenv/versions/3.0.4/lib/ruby/3.0.0/rubygems/dependency.rb:313:in `to_specs': Could not find 'bundler' (1.16.0) required by your /home/ec2-user/work/matching/Gemfile.lock. (Gem::MissingSpecVersionError)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:1.16.0`
Checked in 'GEM_PATH=/home/ec2-user/.gem/ruby/3.0.0:/home/ec2-user/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0' , execute `gem env` for more information
        from /home/ec2-user/.rbenv/versions/3.0.4/lib/ruby/3.0.0/rubygems/dependency.rb:323:in `to_spec'
        from /home/ec2-user/.rbenv/versions/3.0.4/lib/ruby/3.0.0/rubygems/core_ext/kernel_gem.rb:62:in `gem'
        from <internal:/home/ec2-user/.rbenv/versions/3.0.4/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:73:in `require'
        from /home/ec2-user/work/matching/config/boot.rb:3:in `<top (required)>'
        from bin/rails:3:in `require_relative'
        from bin/rails:3:in `<main>'

冷静にエラーメッセージを読んでみると、
超訳 (Rails エンジニア解釈も含む): bundler を最新にアップデートするか 1.16.0 をインストールしろ!
と言っているようです。

アップデートすると他の Gem にもいろいろ影響が出てくる可能性があるので、古い 1.16.0 の bundler をインストールすることにしました。

[bundler とは]
Ruby でライブラリ (Gem) のバージョンを管理するためのソフトウェアです。

$ gem install bundler:1.16.0
Fetching bundler-1.16.0.gem
Successfully installed bundler-1.16.0
Parsing documentation for bundler-1.16.0
Installing ri documentation for bundler-1.16.0
Done installing documentation for bundler after 4 seconds
1 gem installed


エラーメッセージにあったコマンドを実行したところ、無事に 1.16.0 がインストールできました。

再度 rails s コマンドを実行します。

$ rails s -b 0.0.0.0
/home/ec2-user/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-1.16.0/lib/bundler/shared_helpers.rb:29: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-1.16.0/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-1.16.0/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-1.16.0/lib/bundler/shared_helpers.rb:35: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-1.16.0/lib/bundler/shared_helpers.rb:35: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-1.16.0/lib/bundler/shared_helpers.rb:44: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
Your Ruby version is 3.0.4, but your Gemfile specified 2.7.4

今度は別のエラーメッセージが出ました。
超訳 (Rails エンジニア解釈も含む): お前の Ruby は 3.0.4 なのに Gemfile では 2.7.4 使うって言ってるよ!

[Gemfile とは]
どのバージョンの Gem を使うかを指定するファイル。bundler で使われる。

私の環境では rbenv で複数の Ruby を入れています。
偶然にも 2.7.4 もインストール済みだったので、.ruby-version ファイルで 2.7.4 を指定します。


$ cat .ruby-version
2.7.4

$ ruby -v
ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x86_64-linux]

[rbenv とは]
複数の Ruby を動作させるためのしくみ。

[.ruby-version とは]
どのバージョンの Ruby を使うかを指定するファイル。

再度 rails s コマンドを実行します。

$ rails s -b 0.0.0.0
=> Booting Puma
=> Rails 5.1.4 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.11.0 (ruby 2.7.4-p191), codename: Love Song
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

無事 Rails が起動しました!

Rails ではプログラミング以外のバッドノウハウがたくさん存在します。
もし、エラーメッセージが出て思った通りに動かないなどありましたら、以下のサービスを購入してみてください!




サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す