読者です 読者をやめる 読者になる 読者になる

maeshimaの日記

メモ書きです

今週のRailsCasts - Offline Apps Part 1

HTML5 の cache manifest を使って、オフライン時でもコンテンツを表示させる話。

Railscasts - Offline Apps Part 1
ASCIIcasts - “Episode 247 - Offline Apps Part 1”

rack-offline gemを入れると、 public 配下のファイルを見てmanifestファイルを自動で作ってくれる。

wycats/rack-offline - GitHub

単純に gem 入れて設定しただけだとだめでいろいろ落とし穴があるみたい。

キャッシュの課題1

Railsが自動でjavascriptやstylesheetsにタイムスタンプを付けてしまうのでうまくキャッシュが出来ない。下記を config/application.rb に書くとタイムスタンプを付けるのを抑制できる。

ENV["RAILS_ASSET_ID"] = ""

キャッシュの課題2

ブラウザはオンラインでもキャッシュファイルを使うため、viewを変更してリロードしてもすぐには変更が反映されない。オンラインの時にはキャッシュファイルをバックグラウンドでダウンロードするので、二回リロードするとで変更が反映される。

キャッシュの課題3

既存のファイルをリネームしたり消したりすると、manifestが機能しなくなり、変更点が反映されなくなる(ずっとキャッシュを使うようになる)。cache manifestのエラーはデフォルトで何か表示されるわけではないのですごくデバッグしづらい。下記のようにJavaScriptでapplicationCacheオブジェクトのイベントをlistenしとくと検知できる。

$(function () {  
  $(windows.applicationCache.bind('error', function () {  
    alert('There was an error when loading the cache manifest.');  
  }))  
}) 

キャッシュの課題4

rack-offlineはdevelopmentの時には毎回ハッシュを更新するけどproductionの時には更新しない。動的ページの更新(DBの更新)をどのように反映させたらいいか?これは次回に説明するらしい