2016-02-23 40 views
0

有沒有辦法從後臺作業更新或修改視圖?例如,如果用戶想發送100封電子郵件,我想通過視圖向用戶顯示後臺作業的進度。一旦發送第一封電子郵件,顯示1/100,第二個,2/100等。Rails在使用後臺作業時動態更新/修改視圖

我不知道它是否重要,但我正在使用delayed_job。

+0

您可以每X秒設置一次從您客戶端的計算機到您的服務器的Ajax調用,並且服務器對此Ajax調用的響應將檢查發送了多少封電子郵件並將結果轉發給客戶端的瀏覽器。 – MrYoshiji

回答

3

如果您明確希望服務器在頁面更新的來源,那麼你應該看看actioncable,這是Rails實現的WebSockets的(導軌5.0的一部分,可供as a gem以前版本)

原理:客戶訂購發送100封郵件的訂單時訂閱了一個通道SendMailChannel。每當在服務器上運行的作業發送一封郵件時,它就會通過SendMailChannel將此信息廣播給所有訂閱者。然後,您可以在咖啡腳本中使用此信息來更新頁面並相應地顯示計數器。

如果你唯一的目的是要更新計數器,這可能是一個有點矯枉過正,考慮所有的配置中有許多工作要做(工種+渠道開發+訂閱和更新+可能改變你的服務器的CoffeeScript行動像Puma這樣的線程)。

ajax每10秒左右更新一次將會更加網絡化,效率和多功能性更低,但更容易實現。