2021年5月25日火曜日

ruby3 で hanami-router を動かす

ruby3 で hanami-router を動かす

概要

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 件のコメント:

コメントを投稿