2011-12-19 5 views
1

Rails 3.1を使用して、非常にJavaScriptに富むアプリケーションを開発しています。私は、Railsモデルを使用して、Webインターフェースを介して自分でアプリケーションを設定できる「管理者」領域を開発しました。データベースのこの部分は非常に頻繁に変更されることが予想されますが、私はそれを変更する能力が必要です。非常に頻繁に変化するJSONデータをプロダクションのクライアントに送信する最良の方法

私は現在、ブラウザにデータを取得する最良の方法を検討中です。これらの後続のリクエストが最初に完了する必要があるため、JavaScriptアプリケーション自体を起動する前にクライアントにデータをロードする必要があります。できるだけAJAXコールを避けたいと思います。

データはほとんど変更されないため、キャッシングの候補にはなりますが、モデルのたびにRailsアプリを再デプロイする必要がないため、この場合はアセットパイプラインを使用できませんデータが変更されます。

アセットに埋め込みERBコードを使用することはできません。実際にアセットファイルをプリコンパイルしなくても、Railsが変更を受け取る前に変更しておく必要があるからです。モデルのデータは変更されていますが、ERBコードは変更されていないため、MD5ハッシュは変更されていないため、ファイルにアクセスしても(タイムスタンプを更新するために)Railsは新しいアセットファイルを生成しません。

この時点で、私はJSONモデルをビューテンプレートに直接埋め込んでいますが、これを行うには嫌です(データとビューの分離など)。

Rails/Sprocketsに特定のアセットを強制的に再コンパイルするようなプログラム的な方法や、すべての方法がありますか?

答えて

0

今のところ、私はrespond_toを使用してコントローラとJavaScriptビューを作成することに決めました。例:

class ConfigurationController < ApplicationController 
    def index 
    respond_to do |fmt| 
     fmt.js 
     # ... 
    end 
    end 
end 

このコントローラのJSビューは、モデルデータを吐き出す:

<%= javascript_include_tag 'configuration' %> 

<% InfrequentlyChangingModel.all.each do |record| %> 
    AppData[<%= record.id %>] = (<%= record.to_json.html_safe %>); 
<% end %> 

そしてフロントエンドビューでIは、他のJavaScriptファイルのようにそれを参照

私はまだ他の提案をしていますが、これまでのところ最もクリーンで、Railsのようなソリューションです。 (jsファイルのために)余分なリクエストを生成しますが、キャッシュをきれいにして余分なAJAXを避ける必要があります。

+0

私は.erbにバージョンを追加していますが、他の変更がなければ再コンパイルしたいときにバンプします。非常に優しい。 – Hollownest

関連する問題