Thursday, December 27, 2007

A small pitfall on Mac with Capistrano's deploy:web:disable task

To test a deployment process of a rails application at my local machine, a Mac OS X Leopard, I set up virtual host with Apache + reverse proxy + mongrel. When I tried to do "cap deploy:web:disable", I fell in to a pitfall, a Mac OS X local issue. The apache constantly respond "403 forbidden" for every URL under the virtual host.

The things is...

  1. Capistrano uses "/system/maintenance.html" for the path to the maintenance page (by the default)

  2. And if you use Apache mod_rewrite, the setting about maintenance.html may look like this:

    RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
    RewriteCond %{SCRIPT_FILENAME} !maintenance.html
    RewriteRule ^.*$ /system/maintenance.html [L]

  3. But, "RewriteRule" searchs the root of the file-system for "/system/maintenance.html" first (See description about "URL-path" of RewriteRule)

  4. Yes, there is the directory "/System" on Mac OS X, and HFS+ doesn't matter case of filename

  5. "/System" aren't accessible with httpd except you are mad

  6. So, you get "403 Forbidden"


A alternative of the rewrite rule is:

RewriteRule ^.*$ %{DOCUMENT_ROOT}/system/maintenance.html [L]

It works on Mac OS X (and other systems as well I think).

Sunday, December 9, 2007

What I'v just discovered in Advanced Rails Recipes

Advanced Rails Recipes のβブック(pdf) がリリースされたので早速購入して、ザクっと目を通してみました。

一年以上 Rails のアプリケーションを仕事で作っているので、前作(といっても著者は違うけど) Rails Recipes を読んだときほどの発見はなかったけれど、細かい発見がいくつか。ほんのメモ程度なので詳細を知りたい人は本を買ってやってください。

Recipe 17 - Accessin’ Helpers



$ script/console
Loading development environment.
>> helper.human_size 333232323
=> "317.8 MB"


From Recipe 32 - Running Multi-Stage Deployments



set(:deploy_to) { "/path/to/#{application}/#{stage}" }

deploy_to が評価されるときにブロックが実行される。

Recipe 12 - Simplifying Controllers With a Presenter


1つのフォームとアクションで複数のモデルを扱うときのパターン。
普通の ruby のクラスを使って user_name のようなメソッドを method_missing で send("user").send("name") のようにデリゲーションする この method_missing の使い方だけでもいろいろ使えそうだ。
Jay Fields Thoughts : Rails : Presenter Patternが元ネタですね。

Recipe 25 - Enabling Remote Testing


ssh -R オプションによるポートフォワーディングで、開発マシンで実行しているアプリケーションをプロダクションサーバーから参照できるようにする。なるほど。

Friday, December 7, 2007

A low cost server



ファイルのバックアップ、Railsアプリケーションのホスティング(tagnote)などに使っているサーバーです。

半年前までは、イーレッツ Be Silent M6000のコンデンサのアタマが開いて壊れるまで使っていて、その余ったケースに VIA EPIA-LN10000EG と Mini-Box の電源 picoPSU-120 を付けて使ってます。

このサーバー、僕の用途を満たす十分な性能があり、低消費電力でファンレスなので、24時間稼働させてもほとんど気になりません。(廃熱は水筒や乾き損ねたくつ下の乾燥に利用)

ワットチェッカーで測ってみると、消費電力はアイドル時には 20W くらいで、一ヶ月あたりの電力量は、

1.42kwh/71:13(71.21h) => 19.94w/h => 478.58w/24h => 12.34kwh/30d
12.34kwh/30d * 21円/kwh => 259円/30d (11月は192kwhだったので、21円/1kwh)

多く見積もっても 300円/月くらいですね。