有沒有簡單的方法來重新生成Rails頁面緩存?銷燬緩存很容易:重新生成Rails緩存
Person.each.all do |person|
expire_page(:controller => 'yql', :action => 'feed', :id => person.id)
end
這將刪除公用目錄中的緩存文件。在我摧毀它們之後,我想重新創建它們。我不想等到他們在公共網站上查看。
有沒有簡單的rails這樣做的方法。
非常感謝
有沒有簡單的方法來重新生成Rails頁面緩存?銷燬緩存很容易:重新生成Rails緩存
Person.each.all do |person|
expire_page(:controller => 'yql', :action => 'feed', :id => person.id)
end
這將刪除公用目錄中的緩存文件。在我摧毀它們之後,我想重新創建它們。我不想等到他們在公共網站上查看。
有沒有簡單的rails這樣做的方法。
非常感謝
更好的解決方案是過期頁面,然後使用curl命中。因爲curl會生成一個新的請求,所以Passenger只需要足夠的內存來渲染一個feed。它也避免了繞過緩存系統。
def recache
Person.find_each :batch_size => 100 do |person|
expire_page(:controller => 'yql', :action => 'feed', :id => person.id)
system("curl #{yql_feed_url person.id}")
end
render :text => "re-caching was successful"
end
當然,這是一個linux的唯一解決方案。注意比賽條件也是重要的。
要緩存它,你必須渲染它,來渲染它,你必須要求它。如果沒有請求,我認爲你不能這樣做。你總是可以用Rails創建一個,但看起來很麻煩,或者你可以有一個外部的過程,像curl
或Ruby curb
庫。
你確定你必須這樣做嗎?
所以,備案,這裏就是我所做的:
def recache
Person.all.each do |person|
path = MyApp::Application.config.action_controller.page_cache_directory + yql_feed_path(person)
FileUtils.mkdir_p(File.dirname(path))
File.open(path, 'w') do |f|
f.write(render_to_string :action => 'feed')
end
end
render :text => "re-caching was successful"
end
飼料簡直是在正確的位置繪製並寫入文件。我並不樂意繞過緩存系統,但現在就足夠了。
呈現Feed是昂貴的。這真的需要在半夜完成。 – superluminary
聽起來像一些'cron'和'curl'可以完成這項工作。 – tadman
問題在於,通過外部API(非常有限的控制),提要非常迅速地(比它們生成的速度快)被點擊。我需要飼料準備好,或者它超載我的應用程序,我的數據庫摔倒了。其實,我想我可能有一個解決方案...... – superluminary