はじめに
Ruby 2.4.0
を 2.6.2
にアップデートする際につまったことをまとめました。
心構え
Ruby バージョンアップに伴う影響範囲は膨大であることを肝に銘じましょう。
BundleやGemなどの便利なものがありますが、依存性などの関係で動かなくなることがあります。
すんなり移行できることのほうが珍しいです。
Ruby
バージョン定義ファイル
調査のため頻繁に切り替えるので、すべてが同じ値か、想定している値か確認しましょう。
ファイル名 | 説明 |
---|---|
Gemfile | Gemの定義ファイル |
Gemfile.lock | Gemfileから生成する |
.ruby-version | Rubyバージョン定義 |
アップデート順序
Rubyのマイナーバージョンを一気に更新することはよろしくないとの有識者からの助言があったので、 2.4.0
→ 2.5.0
→ 2.6.2
という段階を踏んでアップデートしました。
実例として、2.4.0
→ 2.5.0
への更新は成功するが、2.5.0
→ 2.6.2
でエラーになるケースがありました。
問題切り分けのためこちらも試して見ましょう。
bundle 関連
updateは慎重に
bundle update
は、既存の Gemfile.lock
を破棄しGemfile
からGemfile.lock
を生成します。
ここで問題となるケースが、Gemfile
にバージョン指定がない場合です。
その場合、最新リポジトリを取得しますが、依存性の関係で動かなくなることがあります。
bundle コマンドの影響の小さいものから試してみましょう。
bundle オプション
上は影響度が低く、下ほど影響度が高いです。
コマンド名 | 説明 |
---|---|
bundle install | Gemfileにはあるが、Gemfile.lockに記載のないものをインストールします |
bundle update {gem名} | 指定したGemのみを更新します |
bundle update | GemfileからGemfile.lockを生成します。 現行のGemfile.lockは破棄します。 |
rbenv: bundle: command not found
Rubyのバージョンを変更すると、bundle
が見つからなくなることがあります。
# エラーコード
$ bundle update
rbenv: bundle: command not found
The `bundle' command exists in these Ruby versions:
2.6.2
こういった場合は、bundle
手動インストールしましょう。
gem install bundler
エラーの調査方法
正常に動作している環境を確保する
まず正常動作する環境を確保しましょう。
これができると「実行環境の問題」か、「コードの問題」か切り分けが出来るようになります。
別環境で正常動作しているものを見つけ、自分の環境で動作させてみましょう。
新規Railsアプリケーションを構築
でもいいと思います。
依存性を確認しよう
Gemの動作要件として、別のGemが指定されていることがよくあります。
Gemの最新バージョンを取得すると、現行バージョンと比較して次のようなケースがあります。
- 要求するGemのバージョン指定が上がった
- 要求するGemが、不要になった
- 要求するGemが、差し替えられた
ややこしいのですが、rubygems.org
のサイトで検索を行い、runtime 依存性
を確認してみましょう。
https://rubygems.org/
別環境で動いているコードがあるのでしたら、当該部分のGemfile.lock
の記述をあわせてみて動作確認してみましょう。
Gem公式ページの確認
Gemで提供しているライブラリは、Githubで管理されていることが多いと思います。
公式ページを確認し、不具合issueがないか確認しましょう。修正中や本番リリース待ちだったりします。
急いでいる場合は、Gemfile.lock
を編集して動作確認できたバージョンまでダウングレードることで対応しましょう。