概要
hanami-router を Ruby3 で動作させる場合には安定版ではなくプレリリース版を使う必要があります
環境
- macOS 11.3.1
- Ruby 3.0.0
- hanami-router 2.0.0alpha5
インストール
- bundle init
- vim Gemfile
gem "hanami-router", "2.0.0.alpha5"
gem "thin"
- bundle config path vendor
- bundle install
アプリ作成
- vim app.rb
require 'hanami/router'
app = Hanami::Router.new do
get '/', to: ->(env) { [200, {}, ['Welcome to Hanami::Router!']] }
end
Rack::Server.start app: app, Port: 2300
動作確認
- bundle exec rackup app.rb
- curl localhost:2300
トラブルシューティング
安定版の hanami-router だと Unexpected error while processing request: undefined method unescape for URI:Module
というエラーが発生します
これはこのコミットにより削除された unescape メソッドを hanami-router が依存している http_router という gem がまだ使っているため発生するエラーです
Ruby3 だと unescape メソッドが削除されているため動作しません
Ruby3
irb(main):002:0> URI.escape
Traceback (most recent call last):
4: from /usr/local/opt/ruby/bin/irb:23:in `<main>'
3: from /usr/local/opt/ruby/bin/irb:23:in `load'
2: from /usr/local/Cellar/ruby/3.0.0_1/lib/ruby/gems/3.0.0/gems/irb-1.3.0/exe/irb:11:in `<top (required)>'
1: from (irb):2:in `<main>'
NoMethodError (undefined method `escape' for URI:Module)
Ruby 2.6.5
irb(main):002:0> URI.escape
Traceback (most recent call last):
6: from ./irb:23:in `<main>'
5: from ./irb:23:in `load'
4: from /Users/hawksnowlog/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `<top (required)>'
3: from (irb):2
2: from /Users/hawksnowlog/.rbenv/versions/2.6.5/lib/ruby/2.6.0/uri/common.rb:103:in `escape'
1: from /Users/hawksnowlog/.rbenv/versions/2.6.5/lib/ruby/2.6.0/uri/rfc2396_parser.rb:300:in `escape'
ArgumentError (wrong number of arguments (given 0, expected 1..2))
0 件のコメント:
コメントを投稿