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

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

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

更新: 此问题建议手动处理线程而不是使用delayed_job。

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

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

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

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

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

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

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

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