課題
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