高専カンファレンス in 東京 2014 行ってきた。写真はまだ。
なんか asonas がコード書いてたので後ろから突っ込みを入れたり(依頼を受けてました、) CTF やってみようと言われたのでバイナリもらってう〜んといじってたら解けたとかやっていた。
たいした事はしてなくて手元で動かして strace しつつ探っていただけですね。実行ファイル無しでも解きたかったなあ
昼はじぐそうくんと asonas、mactkg と一緒にハングリーバーガーへ。
Rails 4 のエラーページ
Rails 4 において開発時の例外内容つきエラーページと production での素朴なエラーページ、さらに ActiveRecord::RecordNotFound だったら 404 とかデフォルトでどこでやってるんだろうみたいなのを追っていた。
- ActionDispatch::ExceptionWrapperが例外を保持して- @@resque_responsesを見て exception のクラス名をキーに何かが取れたらそれをステータスコードとして返したりしている (- #status_code,- .status_code_for_exception)
- 例外の表示は ActionDispatch::DebugExceptionsミドルウェアが担当。config.action_dispatch.show_exceptionsが true でconfig.action_dispatch.show_detailed_exceptionsが true であればビューを render して返し、wrapper の返してきたステータスコードを採用- ActiveRecord::RecordNotFoundであれば 404 で返しつつ例外ページが render される
- config.action_dispatch.show_detailed_exceptionsは- config.consider_all_requests_localの値が採用されている事がある
 
- エラーページの表示は ActionDispatch::ShowExceptionsミドルウェアが担当。config.action_dispatch.show_exceptionsが true であればexceptions_appを呼び出し、そのレスポンスをエラーページとして採用する。
- exceptions_appはデフォルトで- ActionDispatch::PublicExceptionsが利用される- Rails::Application#default_middleware_stackで- Rails::Application#show_exceptions_appが呼ばれていて、そこでは- config.exceptions_appがなければ- PublicExceptionsを作成して返している
- exceptions_appは rack env で例外オブジェクト、また PATH_INFO で- ExceptionWrapperの返してきたステータスコードが渡される (例:- /404,- /200)
 
こんがらがったのは下記。
- config.action_dispatch.show_exceptionsは例外ページを表示するのではなく Rails が例外のハンドリングをするかのフラグである
- これが標準では test environment で無効になっているので、controller テストとかでは、例えば RecordNotFound エラーはテストコードまで届く
- config.consider_all_requests_localが例外ページを表示するかを指示する
(つか Configuring Rails Applications — Ruby on Rails Guides に書いてあるんだから読めという話ではあった… middleware の話も書いてあったとは…)