2012-12-20 64 views
1

我們的rails web應用程序必須通過瀏覽器下載/解壓縮包含ftp html文件的請求,以便用戶通過瀏覽器查看。在rails中立即並行執行的後臺任務

歸檔文件可能很大,所以用戶必須等到它在服務器上下載/解包。

我實現了進度條的方式,我在用戶的請求中調用fork/Process.detach,以便他的請求完成,但下載/解包過程繼續在後臺運行。並且在瀏覽器中呈現的JavaScript向我們的服務器發送狀態,直到所有內容都準備好,然後將其重定向到解壓縮的html頁面。

只要用戶請求一個檔案,一切都會順利進行,但是如果他試圖同時運行2個或更多個請求(這樣可以啓動更多分支),似乎只有其中一個完成了,而且休息到期/超時/被乘客殺死(?)。我想這是Passenger/forking的問題。

我不確定它是否有可能修復它,所以我想我需要切換到另一個解決方案。該解決方案需要允許立即並行處理下載。因此如果用戶請求多個檔案,他必須同時看到所有這些檔案的下載/解壓縮進度。

我正在考慮立即運行後臺耙工作,但它似乎啓動速度很慢(我們的服務器上每分鐘都有很多cron rake任務發生)。我喜歡fork的原因是它開始非常快。我知道有延遲的工作,我們也將其用於其他任務。但它可以立即啓動多個進程,而不需要排隊?

回答

1

通過保持叉,並使用單個DJ工人解決。通過這種方式,我可以根據需要同時啓動多個流程,而無需乘客/修改我們產品的gemset(我們試圖避免它,因爲它導致過去的錯誤)

不知道如果在dj內部分叉工人可以引起任何麻煩,在 running fork in delayed job

這樣問,如果ID隨意修改寶石,ID可能使用resque作爲wrdevos建議,或sidekiq,或girl_friday(但是那不太可能,因爲它取決於服務器上運行)。