Ruby の Siantra で、Modular-Application を書いていたら良く分からない挙動にぶち当たって気が付いたら朝になっていたのでメモ。
app.rb
require_relative "hoge" class App < Sinatra::Base configure do disable :protection end use HogeRoutes end
hoge.rb
class HogeRoutes < Sinatra::Base get "/" do ... end end
みたいな事をしていた。
disable :protection
をしているのにどうしても Rack::Protection
が有効になるので、どうしてこうなるんだとあちこちのコードを追いかけたりした結果、HogeRoutes
が App
とは別にもう一度 session, protections
等のセットアップが行われるので、以下のように、 use HogeRoutes
を configure
より上に持ってくる必要があった。
app.rb
require_relative "hoge" class App < Sinatra::Base use HogeRoutes configure do disable :protection end end
HogeRoutes
内の configure
で disable :protection
とやってもいいが、こうするとクラスが増えた際にその分だけ書かないといけなくて大変。セッションみたいなアプリケーション全体で統一的な設定を持つ部分は親の App
でやって良いんじゃないかと思う。