2009-06-07 45 views
1

我有一個cron作業,每十分鐘解析一些XML源,並使用render: file方法創建一些部分以包含在我的Rails項目的每個頁面上。問題是,顯然,它們不會刷新,直到服務器重新啓動。在Rails中渲染外部修改的文件

無論如何,我能做些什麼來強迫rails每次刷新這個文件?

在此先感謝。

回答

2

我認爲你濫用渲染(:文件)。這絕對不是它打算如何使用。渲染局部變量應該用於在多個位置渲染模塊化的erb(或任何您使用的模板lang)代碼,而不是數據加載技術。您正在使用它(看來)加載動態變化的數據。

我認爲你真的想要做的是片段緩存,但沒有更多的上下文,我可能是錯的。

有關片段緩存一個偉大的演練:http://www.railsenvy.com/2007/3/20/ruby-on-rails-caching-tutorial-part-2

可能是你的cron作業將運行一個腳本/亞軍腳本,將創建你希望緩存片段。

如果我不在這裏,請嘗試澄清您正在加載的文件類型以及要完成的操作。

+0

我同意。聽起來像片段緩存可以完成這項工作。讓cron作業過期片段緩存,然後erb將運行,並且下次顯示它們時將被緩存。 – Shadwell 2009-06-13 22:14:12

1

發生這種情況是因爲在生產模式下,Rails兌現了它的所有類和視圖/部分。爲了解決這個問題,你可以在片段緩存塊中渲染你的partials,當你想刷新塊內容時使用方法expire_fragment。其他方式可以切換到開發模式,但它會讓你的應用程序變慢。

+2

的辦法當然是沒有運行在發展中的應用。這是一個可怕的想法。一個不太可怕的,但仍然可怕的想法是在生產中打開課程重新加載,但這是非常糟糕的情況。 – 2009-06-13 22:00:18

6

使用,而不是:

render :inline => File.read(file_name), :layout => true