ランプの中身(Ruby on Railsのシステム開発)
ランプの中身(Ruby on Railsのシステム開発)では、株式会社ケイビーエムジェイのRuby on Railsエンジニアが蓄積したノウハウを公開しています。Ruby on Railに関する技術解説や実践的なノウハウなど、開発現場の技術に則したコンテンツを随時追加していきます。 初心者の方でもわかりやすい技術解説を心がけています。リクエスト、ご質問も受け付けいますので、お気軽にコメントを記述して下さい。

< capistrano... |  メイン | 長い文字列をカットして表示するプログラム... >

hondaの中身(Ruby
2007.12.28

Railsのキャッシュ機能を用いて動的ページを静的ページにする方法を紹介

TOPページにランダムに表示させたいコンテンツがある場合、アクセス毎にページの一部が変わるような場合は動的にページを作成することになりますが、

そんなに目まぐるしく変わらなくても良い、例えば10分に1回の頻度で内容が変わるくらいで十分で、それ以上に一番アクセスが多い(であろう)TOPページの負荷を軽減したい…そんな時に使うのが、今回紹介するページキャッシュ機能と定期的にファイルを削除するバッチプログラムを組み合わせた
静的ページ書き出し機能です。
 

 

ページキャッシュ機能
例えばTOPページを表示するコントローラがmainでアクションがindexの場合、

(RAILS_ROOT)/config/routes.rb内に

 

 map.connect '/', :controller => "main", :action=> "index"
 map.connect '/index.html', :controller => "main", :action=> "index"

 

と記述することで

http://(ドメイン名)/

へアクセスした際に http://(ドメイン名)/main/ のコンテンツを表示するようになります。
その際TOPページを表示しているコントローラー((RAILS_ROOT)/main_controller.rb)の中身は

 

class MainController < ApplicationController

  def index
    (ここにTOPページ内で実行するプログラムを書きます)
  end
 
end

 

こんな感じになります。

このままですと、アクセス毎にHTMLが作成・表示しているのですが、
ここに1行、以下のコードを追加します。

 

caches_page :index

class MainController < ApplicationController

  caches_page :index

  def index
    (ここにTOPページ内で実行するプログラムを書きます)
  end
 
end

これにより、同コントローラ内の指定したアクション(この場合indexです)にアクセスした際に
その時作成したHTMLをサーバー内に保存し、それ以降のアクセスに対しては保存したHTMLを表示するようになります。
HTMLファイルの保存場所はpublic配下に
public/コントローラ名/アクション名.html
アクションがindexの場合は


public/コントローラ名.html


という名前で保存されます。
今回はコントローラ名がmain、アクション名がindexですので


public/main.html


になります。

これにより、初回アクセス時にHTMLファイルを生成・表示・保存を行い、2回目以降は作成したファイルを表示するようになりました。
ですが、このままではせっかく動的に作成したコンテンツが何度アクセスしても見た目が変わらなくなってしまいます。
ですので、このページキャッシュ機能を定期的に削除するバッチ処理を設定します。

 


ファイル削除バッチ
上のページキャッシュはRuby on Railsの機能ですが、こちらはlinuxの機能を使います。
crontabを編集して自動でファイルを削除するコマンドを登録します。
crontab -e #crontabを編集
編集画面にて以下のコードを追加

0-59/10 * * * * rm /(RAILS_ROOT)/public/main.html

Railsのプログラムを/opt/rails/test/に作成している場合は

0-59/10 * * * * rm /opt/rails/test/public/main.html

になります。

これで、毎時10分にキャッシュを削除してくれます。

 


この2つを組み合わせることで、10分毎に中身が変わるコンテンツの出来上がりです。
主な作業はcaches_page の追加と crontab の登録の2点です。
とてもカンタンに出来ますので、是非お試しください。


GOOD RAILS!!

コメント (2)  |トラックバック (0)

ブックマークに追加する

トラックバック URL

コメント一覧

TOPページの負荷は、どのくらい軽減されるものでしょうか?

written by Tips / 2008.01.19 12:22

環境やページの処理にもよって効果の度合いは違うと思いますが、今回想定している「DBからテータを取得して表示しているページ」の場合ですと、
表示の際にapache → Railsサーバ → DB → Railsサーバ → apache という処理の流れが発生しますが、
静的HTMLを書き出しておけばRailsサーバーを経由せずにapacheのみで処理することができるようになりますので効果は期待できると思います。

極端に重くなるページ(表示に10秒かかるなど)でもなければ
見る側には表示にかかる時間がほとんど同じで、違いが分かりにくいのですが、
linuxサーバー側はTOPコマンドで稼働プロセスすると静的ページにアクセスするときは
apacheのみしか動いていないのが分かります。

written by honda / 2008.01.26 01:40

この記事にコメントする

ニックネーム:
メールアドレス:
URL:


KBMJのWebソリューション
Ruby on Rails Summer Festival 2008開催決定!!

TOPICS

2008/08/14
ZD Net Builder」の連載記事です。第七回は「Rubyでどう書く?:RubyCocoa+Core Animationでお手軽アニメーション」が掲載されました。

2008/08/06
ZD Net Builder」の連載記事です。第六回は「Rubyでどう書く?特別編:Matzからのお題」が掲載されました。

2008/07/29
アットマーク・アイティ」にケータイWebアプリ開発、9つの注意点が掲載されました。

2008/07/11
ZD Net Builder」の連載記事です。第五回は「Rubyでどう書く?:RubyでWord文書を作成する」が掲載されました。

全体のRoR最新ブログ一覧

プロフィール

  • honda
  • KBMJでWebプログラマーをやっているhondaです。
    Ruby on Railsで開発をしています。

    ここではRuby on Railsのプログラミングに役立ちそうな小技を紹介していきたいと思います。

ブログの購読

RSS

timelog
株式会社ケイビーエムジェイロゴ