有没有人在使用Prawn时在渲染/构建过程之前启动文件流的例子?
情况是,我有一个大约350页的报告,在我自己的工作站上运行大约需要60秒,但当它移动到生产(EC2)时,运行报告的时间超过300秒,并且当它完成时,它不会将PDF发送到浏览器。
即使是60秒也是一个很长的时间,没有任何用户反馈,但是300秒就不能工作,即使你等待。我一直在寻找的是在渲染过程之前开始下载文件(我使用了一个.pdf.prawn视图),这样至少用户可以在处理过程中看到正在发生的事情,但到目前为止还无法做到这一点。我找到的所有示例和指南都是在渲染完成之后,在漫长的等待之后开始下载的。
如果所有其他方法都失败了,我将考虑计划报告,但理想情况下,用户可以查看报告,然后返回并进行更改并再次运行它,这显然不允许计划。
用Prawnto显示的代码并不多,因为它只是视图中的PDF布局,并在控制器中通过这个调用。我已经尝试了send_file,并将PDF布局移动到控制器以运行它,但所有的更改似乎都给出了相同的结果-在漫长的等待之后,PDF被发送到浏览器。
我在这一点上没有想法,并感谢任何想法!
respond_to do |format|
format.pdf {
prawnto :prawn => {:page_layout => :portrait, :skip_page_creation => true}, :inline => false
render :layout => false
}发布于 2011-03-23 20:38:52
如果生成PDF的时间大于60秒,您应该考虑将其卸载给后台工作人员。建议使用Delayed::Job或Resque。
让工作人员创建PDF并将其保存到磁盘;抛出一个标记(例如,在数据库中或其他地方),以指示PDF已准备好下载。
这会给你的应用程序增加一些额外的复杂性,但用户体验会大大增强,而且你不会出现你所说的“无法下载PDF”的问题。此外,如果您的应用程序使用率很高,您可以更轻松地将创建PDF的工作者卸载到不同的服务器。
https://stackoverflow.com/questions/5404521
复制相似问题