Rails 2.3 アプリを Rails 3.2 に移行しています。さまざまなソースから収集したいくつかの統計情報のキャッシュを管理するために使用するオブジェクトがあります。コレクションの処理に時間がかかるため、従来のフラグメントキャッシングでは対応できませんでした。非同期でキャッシュを埋める必要がありました。AsynchCache オブジェクトを使用して、Google アナリティクスからデータを取得し、パーシャルのコンテンツをキャッシュに保存します。
include Rails.application.routes.url_helpers
class AsynchCache
def self.get_popular_races_from_google_analytics(lang='en')
# getting info form GA using Garb.
end
def self.set_popular_races(language=nil)
av = ActionView::Base.new(Rails.configuration.paths['app/views'])
language_list = Global.instance.languages_UI.map{|a| a[0]}
for lang in language.nil? ? language_list : [language]
output = av.render(
:partial => "home/popular_races",
:locals => {:lang => lang}
)
Rails.cache.delete("popular_races_#{lang}")
Rails.cache.write("popular_races_#{lang}",output)
end
end
def self.get_popular_races(lang='en')
Rails.cache.read("popular_races_#{lang}")
end
end
表示に使用したパーシャルは次のとおりです
- "> tmp_race.name -%>
コンテンツを表示したいときは、次を使用するだけです。
<div id="popular_races"> <%# AsynchCache.get_popular_races(params[:locale])-%> </div>
最初にページをロードしたとき、またはirbで正常に動作しますが、ページをリロードしようとしたり、development.rb config.cache_classes = trueに設定しようとすると、エラーが発生します:
stack level too deep
Rails.root: /Users/macbook/Sites/marathons
Application Trace | Framework Trace | Full Trace
actionpack (3.2.1) lib/action_dispatch/middleware/reloader.rb:70
インクルード Rails.application.routes.url_helpers を削除すると、エラーは発生しませんが、もちろん、ルートにアクセスできません。
Rails 3.2 のモデルからルート メソッドを取得する新しい方法はありますか?