2013-02-21 60 views
4

我運行一個Rails應用程序,它具有在C++開發本地客戶機的JSON Web服務調用(後命令與多JSON形式,上載流文件)如何增加Heroku的30歲H12超時

我已經閱讀了關於routing mesh的Heroku文檔,提到了http連接的30s Heroku限制,以及關於long polling替代方法,指的是工人dynos。

在我的電話中,我處理pdf文檔並在其中插入簽名。這個pdf文件可以是100kb或11Mb(或者更多)。

我明白我最終必須對後臺進程執行此操作,但是我希望在絕對必須完成之前避免執行此操作。

你知道增加超時的方法嗎?我正在處理我的文檔(我在after_save裏面做了這個,但是改成了希望在處理前發送響應的控制器)。

我希望客戶端能夠在文檔處理之前得到響應,但我仍然在heroku方面有一個超時,並且在我的客戶端有一個錯誤。

這一切工作正常較小的文件,但只有一個400KB的網頁121 PDF文檔,它吹散..

最後,我的文件被上傳,所以我需要的是爲響應在發送超時響應之前進入我的客戶端應用程序...

有什麼建議嗎?

我的錯誤:

at=error code=H12 desc="Request timeout" method=POST path=/documents host=fierce-beach-2720.herokuapp.com fwd="81.193.155.217/bl4-155-217.dsl.telepac.pt" dyno=web.1 queue=0ms wait=0ms connect=1ms service=32272ms status=503 bytes=0 

我的控制器:

respond_to do |format| 
     if @document.save! 
     format.html { redirect_to root_path, :flash => { :success => 'Document was successfully created.'} } 
     format.json { render json: @document, status: :created, location: @document} 
     @document.document_process 

回答

2

我使用delayed job + workless,現在我的工人DYNOS時,才需要運行結束。

由於heroku每個應用程序的免費計劃免費使用了750個小時,因此當您的使用率較低時,您可能會繼續免費使用它。

+0

我可以只使用它:Experiment.delay.destroy_all(:user_id => nil)??而已?或者我是否也必須添加一個工人dyno?我怎麼知道工作已經完成? – simo 2014-06-06 11:20:28

1

的建議就是:使用一個後臺進程!

我讀過,你想避免它,但沒有辦法繞過它!這是網絡應用程序中儘可能快地返回客戶端的最佳實踐,因爲它釋放了資源。當您在heroku上運行一個測試程序並且您有多個請求時,它們會在您的超時時間內被阻止,並且沒有用戶能夠訪問您的頁面。當您擁有如此長時間的流程時,您可以輕鬆拒絕服務案例。

如果你不想這樣做,因爲成本的後臺進程,看看免費增值:https://github.com/phoet/freemium

+0

謝謝@phoet,成本實際上是避免工人的主要原因,因爲我在運行heroku免費版,並且仍處於分期階段,所以我將盡可能避免「實際」成本直到我們獲得我們的概念驗證。我會看看免費增值服務 – MrWater 2013-02-21 19:19:28

+0

Hi @phoet,我試圖瞭解免費增值解決方案的完整分步安裝過程,但我沒有到達那裏。我只需要運行github中的setup命令? – MrWater 2013-02-22 09:27:24

+0

您是否認爲我們可以通過延遲工作來構建類似的解決方案? – MrWater 2013-02-22 09:32:38