0

我在Heroku上有一個免費的Rails應用程序,它最近開始接觸一些用戶。我的應用程序中的一個事件涉及查詢另一個API,最多可能需要10秒才能完成。我如何確保同時訪問簡單頁面的其他用戶(作爲另一個用戶的API事件)不需要等待10秒來加載頁面?如何處理Rails應用程序的長時間請求,以便其他用戶不會延遲太多?

我需要支付更多的Dynos嗎?這是可以用delayed_job gem解決的嗎?另一個主機(如AppFog或OpenShift)能夠更快地處理同時發生的請求嗎?

更新: This question建議手動處理線程而不是使用delayed_job。

回答

1

這聽起來像一個延遲工作的情況。如果第一個請求正在等待,那麼最有效的辦法是指定一個進程等待它完成,然後將Rails進程鬆散以處理另一個請求。

+0

我應該應該使用一個工人來運行延遲作業多個工作進程? – Ari

+0

看起來像[他們推薦](https://devcenter.heroku.com/articles/delayed-job)。 – bgates

+0

謝謝。我遇到了一些問題設置它:http://stackoverflow.com/questions/18090760/how-to-make-the-controller-wait-for-a-delayed-job-while-the-rest-of- the-app-cont – Ari

1

是的,你需要更多的DYNOS,speccialy工人DYNOS這些都是在後臺工作的人,你可以延遲工作也可以幫助檢查這個railscast:

http://railscasts.com/episodes/366-sidekiq

也在這裏是一個快速教程在加入麒麟和多線程您免費Heroku的實例:

https://devcenter.heroku.com/articles/rails-unicorn

你把你的賽道分爲兩個或多個實例,然後每一個可以處理各色一nt請求

+0

設置Unicorn後,我需要分割我的Dyno?這聽起來很複雜... – Ari

+0

不,它根本不復雜,檢查這個應用程序,我使用相同的技術:https://github.com/kazpsp/amelia,檢查應用程序根目錄的Procfile,還配置> unicorn.rb它的那麼簡單 –

+0

也不要忘記添加獨角獸到你的gemfile像這樣:寶石'獨角獸' –

相關問題