用 Ruby on Rails 开发各种类型的 Web 应用确实是很棒的选择,但是这些 Web 应用所在的问题领域中,你可能经常会遇到一些复杂精密的计算或者长时间运行的后台任务。但是由于你的 Web 应用被限制在 HTTP 协议的 request/response 模型下,这可能就会造成一些问题。你知道应该如何运行漫长的后台任务而不让你的 Web 服务器超时么?你又知道该如何把这些任务的进度告诉用户么?
使用 Rails 插件 BackgrounDRb 可以解决上面的问题。在 Ruby 的标准库中已经预制了 DRb(Distributed Ruby),为使用 TCP/IP 或 Unix sockets 通过网络存取 Ruby 对象提供了一个简单的 API。而 BackgrounDRb 提供了一个框架方便在 Rails 以外的独立线程中运行后台任务,从而摆脱了 request/response 模型。而且使用 DRb 你可以在 Rails 中使用钩子函数为用户提供任务进度或者状态更新。
对于 BackgrounDRb 的作用,插件的作者告诉我们他正在用 BackgrounDRb 做什么:
- 下载并缓存 RSS,这样可以做一个 RSS 聚合器。
- 使用 watir 驱动浏览器在后来访问网站并收集信息,做自动的屏幕抓取。
- Xen VPS 的自动创建和系统管理任务。
- 后台为 Hyper Estraier 和 erret 创建索引。
- 连接 Rails 和 IRC 机器人。
评论