よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

April 05, 2008 [おもひで]

[Rails] Rails + ApacheでのREST

っていうタイトルで合ってるのかな、ま、いいや。

今さら、RailsとApacheという組み合わせもないよな、みたいなことを言われそうだけど、AppHonyakuはそういう組み合わせ。fcgiとか使わないと遅くて使い物にならん!という声も多いようだけど、AppHonyakuのように、あまりマスを目指さないサービスで細々とスタートするなら充分使えると思うんだよな(今のところの感想です)。もちろん、よく使うページはページキャッシュしたり、努力はしてるんだけどね。

で、そのページキャッシュなんだけど、Railsについている.htaccessのままだと、同じURLに対するGETはうまくいくけどPOSTがうまくいかない。

具体的には、http://apphonyaku.s332.xrea.com/x/catalogs/というURLにGETするときはcatalogs.htmlというキャッシュファイルを参照してくれるので良いのだけど、同じくPOSTしようとすると、やっぱりcatalogs.htmlを読んでしまうため、POSTされない。

で、以下のように.htaccessを書くことで、POSTの時は無条件にdispatch.cgiに振り分けられるようにできた。

RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_METHOD} =POST [NC]
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]

ちなみに、"=POST"の部分は間にスペースを入れるとerror.logに"RewriteCond: bad flag delimiters"と出力して動作しないので注意。


編集