課題
bundle updateコマンドを叩いてライブラリを更新したらエラーで動かなくなったので少しずつ進めることに。
じゃあ少しずつ進めるために、どのライブラリに新しいバージョンがあるのかを知るにはどうすればよいか。
対応
bundle outdated を使うと古くなったライブラリを一覧で表示してくれるのでこちらを利用する
$ bundle outdated
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies..............................................
Gem Current Latest Requested Groups
administrate 0.16.0 0.19.0 >= 0 default
airbrussh 1.4.0 1.4.2
bcrypt 3.1.16 3.1.19 ~> 3.1.7 default
bootsnap 1.7.3 1.16.0 >= 1.1.0 default
bugsnag 6.19.0 6.26.0 ~> 6.12 default
capistrano 3.16.0 3.17.3 ~> 3.16 development
以下略
かなりの量が出てきた。オプションなしだと実際には bundle update では更新されないものも表示されるので--strictオプションをつけ、Gemfileの要件で許可されているライブラリだけをリストアップする。--only-explicit もつけて依存関係は省略してGemfileに記載のあるものだけにする。
$ bundle outdated --strict --only-explicit
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...............................................
Gem Current Latest Requested Groups
active_hash 3.1.0 3.2.0 >= 0 default
active_model_serializers 0.10.12 0.10.13 >= 0 default
activerecord-import 1.0.8 1.4.1 >= 0 default
administrate 0.16.0 0.19.0 >= 0 default
airbrussh 1.4.0 1.4.2
bcrypt 3.1.16 3.1.19 ~> 3.1.7 default
bootsnap 1.7.3 1.16.0 >= 1.1.0 default
bugsnag 6.19.0 6.26.0 ~> 6.12 default
以下略
これで目的のものが得られた。--strictとの違いがよく分からないけど --update-strict もつけているといいかもしれない。
この他にもbundle outdated --help を見ると他にも使えそうなオプションがあり、bundle updateのオプションと関連しているものもあったので色々試してみると良さそうだ。
実際にやってみる
bundle outdatedを使って段階的なアプデをしてみよう。
まず--patchを使ってpatchがあるものだけチェック
$ bundle outdated --patch --strict
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies....
Gem Current Latest Requested Groups
active_hash 3.1.0 3.1.1 >= 0 default
active_model_serializers 0.10.12 0.10.13 >= 0 default
airbrussh 1.4.0 1.4.2
bcrypt 3.1.16 3.1.19 ~> 3.1.7 default
以下略
次に実際に bundle update に --patchオプションをつけてパッチバージョンだけ上げる
$ bundle update --patch --strict
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Using rack 2.2.8 (was 2.2.6.4)
Using nio4r 2.5.9 (was 2.5.8)
Using thor 1.2.2 (was 1.2.1)
$ bundle outdated --patch --strict
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Bundle up to date!
無事パッチだけ更新されたのでここでSPECの実行、軽い動作チェックを挟つつ、--minor --major と更新していけば問題が起きても比較的早く解決できるだろう。
参考
stackoverflow.com