我正在使用 Ruby,我需要在控制器中执行长时间运行的任务时向用户发送持续更新状态消息。
该方法在数据库中插入一些行。我想要的是向用户显示这样的消息:
正在上传,已插入 X 个文件。
目前我正在使用 LoadMask jQuery 插件,但它只显示一条简单的消息,我不知道如何发送插入的行数而不中断进程。
我正在使用 Ruby,我需要在控制器中执行长时间运行的任务时向用户发送持续更新状态消息。
该方法在数据库中插入一些行。我想要的是向用户显示这样的消息:
正在上传,已插入 X 个文件。
目前我正在使用 LoadMask jQuery 插件,但它只显示一条简单的消息,我不知道如何发送插入的行数而不中断进程。
您应该考虑将这个长时间运行的进程转移到后台任务中,这样您就可以立即向用户提供反馈。提交后台作业后,根据您的后台处理引擎,您将能够检查作业的状态。自己跟踪状态可能很简单(取决于您的任务)。使用 Redis 或仅在您的数据库中使用(为此创建一个单独的表)。提交作业后,您需要返回可用于轮询更新的作业 ID。
创建一个新的控制器(或动作),您可以使用 jQuery + Ajax 并轮询更改。给它一个 job_id (您之前的操作返回)
另请看:Faye:http ://faye.jcoglan.com/,http : //railscasts.com/episodes/260-messaging-with-faye Goliath:http : //postrank-labs.github.com/goliath /
http://railscasts.com/episodes/229-polling-for-changes
延迟作业、Resque 等
哦,如果你只是在找一个简单的文件上传进度指示器,看这个Rails,上传进度条
您也可以尝试流技术,这里有很多信息: Ruby on Rails 3: Streaming data through Rails to client
这是 Rails 中的常见需求,通常使用 JQuery 是正确的方法。
虽然控制器和视图的代码细节取决于您如何构建应用程序,但这里是一个很好的起点:
Railscast #136:jQuery:http ://railscasts.com/episodes/136-jquery/
您需要考虑的一件事是如何定期从您的方法报告到目前为止插入的行数。你有办法吗?
首先查看 railscast —— 它会让您了解如何至少进行下一步。