Techioz Blog

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 を使い続けることもできます。