2013-04-19 32 views
0

我的Rails 3.2應用程序有一個報告頁面,通常需要90多秒才能呈現,因此我將報表生成器作爲delayed_job任務運行,然後顯示「等待一分鐘」視圖(使用刷新按鈕),直到內容準備就緒(視圖中使用的content_ready標誌可以根據需要顯示「等待消息」或報告)。在我的原型中,用戶必須手動刷新頁面,直到設置了content_ready(然後呈現報表視圖)。在rails 3.2應用程序中,當後臺作業完成時更新頁面的最佳方式是什麼?

我想在content_ready爲true時自動刷新頁面。

什麼是最簡單的方法來實現這一點,因爲它是一個很少見的頁面,因此效率低下的方法,比如告訴用戶的瀏覽器每10秒輪詢一次服務器(或重繪整個頁面)就好了?

回答

1

設置頁面上的元刷新或者ajax更新程序(如果使用jquery,see here),該程序會檢查特定的控制器操作,告訴您作業是否已完成,或文件是否存在於預期位置。

或者,假設您使用的是delayed_job gem,請檢查作爲作業排隊執行一部分提供的掛鉤。有關於gem's GH page的文檔。

+0

「元刷新」方法的一個重要警告是Firefox默認禁用元刷新。 (我們使用瀏覽器gem爲我們的Firefox用戶添加一個手動刷新消息和按鈕,這些消息越來越受到少數人的感謝。) – jpwynn

1

我推薦以下策略:

  • 創建延遲作業後,立即通過作業的ID返回給瀏覽器。
  • 在您的網站上公開一個將返回作業狀態的端點。
  • 使用jQuery + setTimeout或setInterval命中端點。
  • 作業完成後,將用戶重定向到適當的頁面。

這是一個非常簡單的策略,但它的工作原理。

+0

謝謝,我最終走了元刷新路線,但您的答案也很有幫助。 – jpwynn

相關問題