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