如何处理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分成两个或更多个实例,然后每个实例可以处理不同的请求
你使用什么样的应用服务器? 如果您使用乘客或独角兽,您可以拥有多个可以同时处理请求的工作进程
- Heroku + Rails 3.1:asset_path未定义?
- 如何让rufus-scheduler使用部署到Heroku的Rails应用程序?
- Twitter“无法validation您”错误
- 部署+配置文件+ Heroku
- Heroku / Unicorn上的重复导轨错误 – “执行过期”,一个ActionView :: Template :: Error
- AWS S3,Paperclip缺少必需:bucket选项
- 尽管在Heroku上使用Rails设置了新的参数组,但无法在RDS中存储UTF-8
- Rails,Heroku和Subdomains。 我的特殊情况是否可行?
- Errno :: ECONNREFUSED(连接被拒绝 – 连接(2)为nil端口587):对于Heroku上的Rails