Happy Man

mash-uppy

mod_railsを入れてみた

ジュンヤさんのmod_rails Enterprise Edition に切り替えましたと、
yukiのPassenger入れてみた
を読んで。
思いたったので
mod_railsをいれました。
確かに簡単。
インストール自体は、適当にgooglingしてください。
本家のマニュアル
Passenger users guide
設定したこと
開発ユーザxxxxでログインした後
ホームディレクトリ /home/xxxx
rails用ディレクトリ /home/xxxx/rails
cd /home/xxxx/rails
アプリ名をtestとして
rails test
zzzコントローラを作りました。
./script/generate controller zzz
設定内容
#vi /home/xxxx/rails/test/public/.htaccess
以下の1行を追加
RewriteBase /test
以下suで作業しました。出来たファイルです。
#cat /etc/apache2/conf.d/passenger.conf
Alias /test "/home/xxxx/rails/test/public"
<directory "/home/xxxx/rails/test/public">
AllowOverride all
Order allow,deny
Allow from all
</Directory>
#cat /etc/apache2/mods-available/passenger.load
LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-1.0.5/ext/apache2/mod_passenger.so
#cat /etc/apache2/mods-available/passenger.conf
RailsSpawnServer /var/lib/gems/1.8/gems/passenger-1.0.5/bin/passenger-spawn-server
RailsRuby /usr/bin/ruby1.8
で、以下を実行
#a2enmod passenger
#/etc/init.d/apache2 restart
http://x.x.x.x/test/zzz
でアクセスできるようになります。
#a2enmodってコマンドはじめてみました。apache2真面目に勉強しないと。。。
設定方法、ここは違うとか変とか教えてください。w

簡単キャッシング

お金のことではないですよ。もちろん、railsネタです。
ActionControllerのcaches_pageという機能を使います。
やることは3つです。
1.config/environments/production.rb(開発中ならdevelopment.rb)の
設定を確認して以下のようにtrueにします。
config.action_controller.perform_caching=true
デフォルトな設定の場合
作成されるキャッシュファイルの拡張子はhtml
保存場所は、public以下にroutes.rbに従って、
コントローラ名/アクション名フォルダのように作成されます。
また、デフォルトではなく変更したい人向けのオプションもあります。
拡張子と保存ディレクトリを適宜変更できます。
config.action_controller.page_cache_extension='.html'
config.action_controller.page_cache_directory='/public/caches'
2.コントローラに、キャッシュしたいメソッド名というかアクション名を以下のように追加します。
caches_page :キャッシュしたいメソッド名1,:キャッシュしたいメソッド名2…
準備は、たったこれだけです。
2で設定されたアクションのページにアクセスしてみてください。
指定フォルダにキャッシュファイルが作成されています。楽チンですよ。
一生ずっと内容が変わらないコンテンツであれば
これでよいのですが、普通はそうはいきません。
必ずページは更新されるはずです。
3.キャッシュファイルの更新
作成されたキャッシュファイルを消した後、
もう一度ページにアクセスすればキャッシュは更新されます。
消す方法はいくつか考えられると思いますが、
railsの機能としてはexpire_pageがあります。
たとえば、以下のようなイメージです。
showでキャッシュ作成、updateでキャッシュ削除
PhotosController
caches_page :show
def show
photo=Photo.find(:first, :conditions=>['id=?',id])
end
def update
Photo.update(id,{:column1=>'aaa',:culumn2=>'b'})
expire_page :action=>'show',:id=>id
end
ちなみに
OFINDERの場合、
GMAIL受信時(cronです)に写真が追加されたページのファイルを
消してあげるようにしました。
cache_file="キャッシュフォルダ/#{id}.html"
FileUtils.rm(cache_file,{:force=>true})
あと、IMPORTでの検索結果はキャッシュしていません。

railsのステキなところ

で、さっそくなんですが、
わたしが思う、railsのステキなところです。
CoC(設定よりも規約)な思想
XMLやDBに設定を保存するよりも
規約に従ったディレクトリ構成やクラスやメソッドにより
システムを組み立てていく。
例えば、
あるオープンなフレームワークの設定ファイルに関するドキュメントはあるけど、
今、まさに開発しているそのシステムにおける
設定ファイルに関するドキュメントは大体の場合無い。。。。
そこでCoCな思想の場合、そのドキュメントが無くても
ある程度はカバーできる、と思う。
DBまわりの管理
言わずもがな、ActiveRecordですが、
特に、Migrationの履歴というか
db/migrate以下のファイル達がよいです。
テーブルスキマに関する設定ファイルのバージョン管理より
001、002、と変更の履歴を一目で見渡せるのがよい、と思う。
————
他にもあるけどね。
ちなみに
嫌いなところもありますよ。当然。
でも、それは、書かない。
そんなことは、どうでもよいので。笑

railsプラグイン=>widgetsについて

前回投稿時にふれたrailsプラグインの
widgetsなんですが
早速お試しで使ってみようと思って、
チェックアウトしてみたんですが
grepしてもnubbinらしき字面がないんで
どうしたものかなと、ググッてみたところ
こんなキャッシュが引っかかりました。。。
日付は、11末ですね。
スライド中にだけ紹介されていた
column layoutとnubbinについては
まだ、コミットされていないようです。残念。
と、まぁ、あきらめ気味に
widgets開発者のpaolo.donaさんのページを
眺めていたら、友人を訪ねて去年来日されていた模様。
ちょっとビックリです。

Next Page »