如何处理Rails应用程序的长请求,以便其他用户不会延迟太多?

时间:2013-08-06 14:42:17

标签: ruby-on-rails ruby-on-rails-3 heroku concurrency delayed-job

我在Heroku上的免费套餐上有一个Rails应用程序,它最近开始吸引一些用户。我的应用中的一个事件涉及查询另一个API,最多可能需要10秒才能完成。如何确保同时访问简单页面的其他用户(作为另一个用户的API事件)不需要等待10秒才能加载其页面?

我需要支付更多的Dynos费用吗?这是可以用delayed_job gem解决的吗?另一台主机(如AppFog或OpenShift)是否能够更快地处理同步请求?

更新: This question建议手动处理线程而不是使用delayed_job。

3 个答案:

答案 0 :(得分:1)

这听起来像是一个延迟工作的情况。如果第一个请求只是在等待,那么最有效的方法是分配一个进程来等待它完成并将Rails进程松散以处理另一个请求。

答案 1 :(得分:1)

是的,你需要更多的dynos,speccialy worker dynos那些是在后台工作的人,你可以检查这个有关延迟工作的railscast:

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

这里还有一个关于向你的免费heroku实例添加独角兽和多个线程的快速教程:

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

你将你的dyno分成两个或更多个实例,然后每个实例可以处理不同的请求

答案 2 :(得分:0)

您使用的是哪种应用服务器?如果您使用乘客或独角兽,您可以拥有多个可以同时处理请求的工作进程

http://www.modrails.com/documentation/Users%20guide%20Apache.html#_passengermaxinstancesperapp_lt_integer_gt