sinatra2の微妙な非互換
2016-10-17
TechこのブログにKaminariを入れてページネーションをやろうと思ったのだが、gemのバージョンの関係で簡単には入らないことが分かった。
- Kaminariはactionpackとactivesupportの3以上を必要とする。
- nlog2(このブログのことです)ではactiverecord 5.0.0.1を使っている。したがって、actionpackとactivesupportも5.0.0.1になる。
- actionpack 5はrack 2を必要とする。
- しかしsinatra 1.4.7がrack 2に対応していないので、sinatra 2.0.0.beta2に上げる必要がある。
- sinatra-contribも2.0.0.beta2に上げる必要がある。
- さらにsinatra-activerecordは最新版でもsinatra 1系固定になっているので、なんとかしてsinatra 2と共存させる必要がある。
- これはとりあえずgemspecだけいじったものを用意したので、
gem 'sinatra-activerecord', git: 'https://github.com/yhara/sinatra-activerecord', branch: 'sinatra2'
でなんとか動かせそう。
- これはとりあえずgemspecだけいじったものを用意したので、
とまあここまでやってテストを走らせたところいくつかFailureが出た。ルーティング定義で正規表現を使っている箇所があったのだけど、先頭にスラッシュを付けたら直った。部分一致じゃなく全体一致になったのかも。
- get %r{(\d\d\d\d)/(\d\d)/(\d\d)/(.+)} do
+ get %r{/(\d\d\d\d)/(\d\d)/(\d\d)/(.+)} do
まあそのほうがいいよね(気づいてなかったけど、この修正をするまでは /asdf/2016/08/11/making-blog-1
みたいなURLでもアクセスできてしまっていたようだ)。