その他
    ホーム 技術発信 DoRuby Railsのキャッシュ機能を用いて動的ページを静的ページにする方法を紹介

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

    警告: 整合性のない脚注開始用の簡単コード:

    この警告が見当違いであれば、管理画面の 全般設定 > 脚注の開始・終了用の簡単コード > 簡単コードの整合性を検査 にある構文検査の機能を無効にしてください。

    整合性のない脚注開始用の簡単コード:

    “RAILS_ROOT)/main_controller.rb)の中身は class MainController < ApplicationController   def index    (ここにTOPページ内で実行するプログラムを書きます)  end end こんな感じになります。 このままですと、アクセ…”

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    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!!