[Rails] 久々のRials
お仕事で必要になった、凄く簡単なWebアプリを Rails で作りました。
久しぶりだったので 1テーブル・実質1ページのアプリなのに5時間もかかってしまいました ^^;
たぶん殆どの時間は、何度ものテーブル設計のやり直し、サーバーへのgem,rails,mongrel,mod_proxyのインストールではまる、Effects.js で遊んだ ^^; 時間です。
学んだ事:
validates_presence_of の条件指定
ある条件が成り立っている時だけバリデーションする場合 :if で条件指定メソッドを指定しますが、 簡単な場合、Proc を使ってそこに書くこともできます。
validates_presence_of :comment, :if => Proc.new {|q| q.quality == 'C'}
Proc クラスは初めて使いました。Procは無名関数の様なものです (厳密には関数とは違います → http://www.ruby-lang.org/ja/man/?cmd=view;name=Proc)
エラーメッセージに出るカラム名を日本語化する
WEB+DB Press Vol.35 に出ていた ActiveHeart (http://jp.rubyist.net/magazine/?0012-RubyOnRails) を使ってみました。シンプルです ^^)
PotsgreSQL でナゾのエラー
DB,テーブルを準備してRadRailsで scaffold を実行したところ Bad file descriptor - connect(2) が発生! 設定やテーブルを穴の開くほど見直したのですが、問題が発見できなかったので。も一度 DOSプロンプトから ruby script/scaffold で実行するとナゼか成功 ???
サーバーへの Gem インストールで Ruby core dump ^^;
もう夜も更けてきての core dump に汗;; そういえば Tomcat(java)が動いていた事を思い出し。tomcatを止めてインストールしたところ無事完了! 借りてるサーバーは VPS でメモリー制限があるのでした。
mongrel インストール
以前、fastCGIでメゲてしまったので、今回は mongrel にしました。ここを参考にインストールしたらあっけなく成功。 簡単、サーバーとしても立ち上がり Good です!
mongrel の設定ですが、以下のよな感じですで設定ファイルを作りました
mongrel_rails start -e production -d -p 3000 --prefix /hoge
またコマンドラインでは指定できないようですが、 host を 127.0.0.1 に設定して 外部から 3000番ポートを受け付けない様にできます。
mod_proxy の設定
先ほどの ページ にあるように mod_proxy_balancer にするのがカッコ良さそうでしたが、ほとんどアクセスの無いアプリなので、とりあえず mod_proxy で済ませました。
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /mongrel http://localhost:3000/mongrel ProxyPassReverse /mongrel http://localhost:3000/mongrel