Devise 4.3.0でのRuby 2.5.0-preview1のエラーを暫定的に解消する

Devise を使った Rails アプリケーションで Ruby 2.5.0-preview1 を使った際に発生する以下のエラーを解消するための Devise の Forked patch となる。

[::1] SyntaxError (/Users/koic/.rbenv/versions/2.5.0-dev/lib/ruby/gems/2.5.0/gems/devise-4.3.0/app/controllers/devise/sessions_controller.rb:5: syntax error, unexpected '{', expecting keyword_end
...ion only: [:create, :destroy] { request.env["devise.skip_tim...
...                              ^
/Users/koic/.rbenv/versions/2.5.0-dev/lib/ruby/gems/2.5.0/gems/devise-4.3.0/app/controllers/devise/sessions_controller.rb:5: syntax error, unexpected '}', expecting keyword_end
..."devise.skip_timeout"] = true }
...                              ^):

その Forked patch で解消するには Gemfile あるいは gems.rb に記している devise の箇所を以下のようにする。

# Use devise from a branch of koic/devise until devise 4.3.1 or higher.
gem 'devise', github: 'koic/devise', branch: 'fix_syntax_error_for_ruby_2_5_0_preview1'

元にしたパッチ自体は pat さんが投げてくれていて既にマージもされている。

github.com

簡単なものなので、いちおうそのときの手順を書いておく。

g co -b fix_syntax_error_for_ruby_2_5_0_preview1 refs/tags/v4.3.0
g cherry-pick 1009096172f2cbc86bcd54d053c89a09be67fb9f

このように 2017年10月18日時点で最新の Devise 4.3.0 にそのパッチだけ充てたもので、次の devise (4.3.1 かな?) になれば upstream に入っていると思うので本流を使って良くなると思っている。

あわせて知っておきたい bugs への k0kubun さんのレポート。

bugs.ruby-lang.org