管理上传图像以在heroku上创建自定义pdf - 正确的工具

时间:2010-09-01 14:56:49

标签: ruby-on-rails heroku

我设计了一个应用程序,允许用户从他们的硬盘驱动器上传图像(每张图像最多500k,大约20张图像)到网站,以便能够以pdf格式制作一些自定义的桌面游戏(例如蛇和梯子)。这些将立即与虾一起创建,然后可供即时下载。

上传的图片和创建的pdfs都不需要永久保存在我的应用端。用户下载pdf时,不再需要它们。

Heroku不支持将文件保存到系统中(它确实允许使用tmp目录,但是说你不应该依赖它来为我敲击它)。我想知道我应该考虑哪些工具/服务来解决这个问题。我看了回形针,我想知道这是否适合这种工作。

2 个答案:

答案 0 :(得分:1)

Paperclip听起来像是理想的候选人。它将保存RAILS_ROOT/public/system/中的图像,这是持久的和私有的(不应该在共享主机上枚举)。

您可以将其配置为根据需要生成图像的缩略图。

它可以删除相关模型销毁时管理的图像 - 用户下载PDF后,从数据库中删除记录。

Prawn可能不合适,具体取决于您需要生成的PDF的复杂程度。如果您有$$$,请转到PrinceXMLprincely宝石。我使用wkhtmltopdf取得了一些成功,它使用Webkit HTML / CSS渲染生成PDF - 但它不支持Prince所做的任何高级页面操作。

答案 1 :(得分:1)

Paperclip走在正确的轨道上,但关键的洞察力是您需要使用S3存储后端(Paperclip默认使用FS,正如您所注意到的那样对Heroku没有好处)。它非常方便;它不使用刷新写入文件系统,而是使用AWS :: S3 gem将它们上传到S3。您可以在此处的rdoc中详细了解它:http://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/storage/s3.rb

以下是流程的工作原理:

我会让您的用户上传他们的多个源图片。这篇文章是关于允许使用回形针的一个模型的多个附件:http://www.cordinc.com/blog/2009/04/multiple-attachments-with-vali.html

然后当你准备好生成PDF时(可能是在后台工作中,对吗?),你所做的就是将所有源图像下载到tmp /中的某个地方(确保目录基于你的模型ID或所以,如果两个人同时这样做,文件就不会被踩到)。下载完所有图像后,即可生成PDF。我知道这是使用文件系统,但只要您在一个请求或作业周期中完成所有文件系统交互,它就会起作用,您的文件仍然存在。我在几个生产网络应用程序中使用此方法。你不能指望在请求之间存在tmp /,但在一个请求中它是可靠的。

使用回形针将生成的PDF存储在S3上也很有意义,因为这样您就可以将用户的S3 URL传递给用户。如果你想要的话,如果你不想支付S3的费用,你可以经常做一些事情来清除文件,但它们应该是微不足道的。