我面对以下情况。
用户单击链接以生成文本或XML。我的控制器中有一个方法generateXMLfile
,它从db表中读取数据并创建一个哈希或数组。完成阅读和创建后,我使用send_file
方法发送数据。
文件生成过程可能需要5到25秒(大数据),所以我想要做的是在处理请求时显示“请等待”消息并等待gif动画,并显示成功成功完成后的信息。
我知道如何实现类似的操作,例如,使用纯AJAX进行文件上传,但我不知道如何在Rails中执行此操作。
有没有人处理过类似的问题?执行此操作的最佳实践或Rails方法是什么?有什么建议或建议吗?
更新:
def generateXMLfile
#lengthy operation
(1..100000000).each do
end
sample_string = "This is a sample string\ngenerated by generateXML method.\n\n Bye!"
send_data sample_string,
:type => 'charset=utf-8; header=present',
:disposition => "attachment; filename=sample.txt"
end
答案 0 :(得分:1)
你可以使用UJS绑定这样的调用。
<%= link_to "send file",generateXMLfile_path, :remote => true, :id => "send_file" %>
$('#send_file').bind('ajax:beforeSend', function() {
$('#please wait').show();
});
$('#send_file').bind('ajax:complete', function() {
$('#please_wait').hide();
$('flash').show();
});
您也可以使用generateXMLfile.js.erb
进行完整操作。
答案 1 :(得分:1)
请求5-25秒不是一个好主意。 当多个用户同时开始上载文件时,它可以使您的应用程序无响应。或者您可以在Web服务器上达到超时限制。 你应该使用一些后台处理工具,这里有一些选项:
延迟工作是最简单的工作,Sidekiq和Resque有点复杂,他们要求你安装Redis。
当后台处理完成后,您可以使用一些基于Websocket的工具向您的前端发送消息。 Pusher(http://pusher.com/)就是其中一种工具。