Ruby 3.0.1 にアップデートした後、Shotgun が起動しません
概要
Ruby 3.0.1 にアップグレードした後、Sinatra アプリの Shotgun を起動しようとすると、次の結果が得られます。
$ shotgun
== Shotgun/Thin on http://127.0.0.1:9393/
/Users/me/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/rack-2.2.3/lib/rack/handler/thin.rb:11:in `run': wrong number of arguments (given 2, expected 1) (ArgumentError)
from /Users/me/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/shotgun-0.9.2/bin/shotgun:156:in `<top (required)>'
from /Users/me/.rbenv/versions/3.0.1/bin/shotgun:23:in `load'
from /Users/me/.rbenv/versions/3.0.1/bin/shotgun:23:in `<main>'
gem list を実行すると、次の結果が得られます。
ショットガン (0.9.2)
どうしたの?ありがとう!
解決策
Ruby v3.0 では、キーワードと位置引数に関連する重大な変更が導入されています。
ショットガンの宝石は長い間更新されていませんでした。最新バージョン (0.9.2) は 2016 年 9 月にリリースされました。
github の gem を見ると、あなたが提起したまさにこの問題について未解決の問題があり、誰かがすでに - ありがたいことに - 修正を加えてプロジェクトをフォークしています。
元の作成者がこの修正をマージして新しいバージョンの gem をリリースしない限り、上記のようなフォークされたバージョンを使用する必要があります。たとえば、Gemfile を次のように更新します。
gem 'shotgun', git: 'https://github.com/delonnewman/shotgun.git'
次に、バンドルのインストールを実行します。
まったく同じ修正を加えたオープン PR もあるので、代わりにそのフォークを同様に使用することもできます。
…あるいは、今のところ Ruby 2.7 を使い続けることもできます。