2014-01-25 57 views
1

我正在使用beanstalkd plus backburner來運行異步作業,並且我想在每個作業完成執行後自動使用一些信息更新Flash消息。Rails - 在異步作業後更新Flash消息

作業完成執行後,我可以在控制器上獲得閃存消息。刷新頁面後,將出現閃光消息。但是我想要的是,信息本身就會出現。我怎樣才能做到這一點?

+1

您可以使用異步任務的結果更新網頁的唯一方法是不斷輪詢服務器並查看是否已完成,並且沒有簡單的方法來完成此操作。您必須創建一個檢查狀態的控制器,並設置JavaScript輪詢循環來定期點擊服務器並檢查狀態。網絡根本不會推送更新。 –

+2

看看這個Railscast:http://railscasts.com/episodes/316-private-pub – jcm

+0

嗨@JimStewart,感謝您的幫助。你是對的,昨天我搜索了可以幫助我的寶石。最後,我發現private_pub並解決了它的問題。 – dspereira004

回答

2

我一直在玩弄這個想法了一會兒,

的東西,避免輪詢或WebSockets的做推的設立,

一個方法是建立未決的提示信息,索引的表它通過created_at,使其成爲用戶模型的has_many關係,並在應用程序控制器上設置before_filter來呈現發生在last_request_at之後的閃存消息。

您設置了一個很好的用戶方法,例如User#message,例如說some_user.message "blah blah",它會將消息呈現給用戶。

下降是很多可能的數據庫垃圾郵件,但由於Flash消息表只是時間戳,外鍵和字符串列,這實際上應該是相當高性能。但是,考慮到您選擇的豆莖,這可能不是您的最佳解決方案。

B計劃(假設您不需要持久閃爍),您可以在Rails.cache中保留消息,並在渲染時清除緩存。

A/B混合解決方案就是把這些信息變成像蒙戈,Redis的等等

只要確保它在一個不錯的,抽象的API都包起來像some_user.message,你可以在不同的方法之間以後帶開關易於使用

+0

您的三種可能的解決方案可能都有效。不過,我選擇使用private_pub來做到這一點,它的工作非常好!謝謝您的幫助! – dspereira004