アーカイブ

2010 年 2 月 のアーカイブ

Apacheは知らないhttpステータスは返さない。 このエントリーを含むはてなブックマーク はてなブックマーク - Apacheは知らないhttpステータスは返さない。

2010 年 2 月 11 日 Comments off

正しくは、500を返す。

render :nothing => true, :status => 450

なんてことをしていて、Mongrelの開発環境だとちゃんと450が返ってくるのにApache+Passengerの検証環境だと500が返ってきていた。
そこで原因を調べたところ、返す可能性のあるステータスコードはすべて定義されていて、それ以外は500で返している。(※ソースは後述)

で、なんでこんなことをしようとしているのか。Flashのアップローダを作ってFileReference#upload()でアップロードしているのだけれど、こいつが結果をHTTPステータスでしか受け取れない。だから、結果のメッセージをサーバから返してそれを表示する、てこともできない。
アップロード自体が成功したか否かを知るには200かそれ以外か、くらいで十分なんだけれど、アプリ要件(たとえば、アップロードが終わってからファイルを受け付けられない状況になってただとか、ファイルの中身を見て判断しなきゃいけないだとか)での結果を返すには、これでは足りない。
結局、Apacheのソースコメントでunusedとなっていた418~421に意味を持たせ、そこを使って対応しました。層を混同していて気持ちがいいものではないのだけれど、影響範囲は広くなく、なんらかのフラグを立てて別リクエスト、のコスト増を考えるといいだろうとの判断。もしなにかいい方法があったら教えてください。

以下、Apacheソースの該当部分。
続きを読む…

カテゴリー: Apache, Rails タグ:

発想の違い。 このエントリーを含むはてなブックマーク はてなブックマーク - 発想の違い。

2010 年 2 月 6 日 Comments off

括り出したい | アクトインディ技術部隊報告書

if pred
  method(100)
else
  method(200)
end

のようなものを見ると

method(if pred
         100
       else
         200
       end)

と書きたくなってしまいます。

このifの纏め方は、LISPではすんなり流れるものの、Rubyだとif〜endが重たくみえるので、なんとなく書いてはいけないようにさえ感じます。

ささった。言われてなるほど、同じことをするにも使う言語によって考え方が変わるという、わかりやすい例だと思いました。

カテゴリー: プログラミング一般 タグ: