Jon*_*and 14 ruby-on-rails delayed-job resque carrierwave jquery-file-upload
我正在构建一个允许同时上传大量照片的应用程序,并想知道解决此问题的最佳设置.
这是我到目前为止使用的:
我想允许用户能够将大量图像拖放到页面上,然后在后台进行上传时导航到其他页面.我还想在完成上传时显示图片.我不希望这个过程锁定Heroku dynos,所以我可能需要将工作转移到后台工作,但我不确定该用于我的情况.
这类应用程序的最佳设置是什么?我应该使用什么背景工人宝石?Cloudinary是个好主意吗?
Taa*_*avo 34
我最近构建了一个在Heroku上接受大量上传的应用程序.我决定构建自己的解决方案,而不是使用cloudinary或等效的.以下是我学到的一些课程:
不要上传到heroku.您的整个Web工作人员将在整个上传期间被锁定.那是一分钟.不能接受的.
使用javascript上传器(如jquery-file-upload)直接上传到s3.起初这有点复杂,但是一旦你开始工作它就太棒了.您可以使用s3_direct_upload gem,也可以只读取其源代码,从头开始制作自己的解决方案.这个宝石是基于一个railscasts pro剧集,你必须支付,但有源可用.
上传完成后,向您的应用程序发出ajax请求,将新的s3 url作为远程URL传递.然后Carrierwave会像上传一样处理s3上的图像,除非只需几秒钟而不是一分钟.
使用jquery-file-upload的客户端图像大小调整.有人会尝试上传一张5MB的照片然后婊子说上传需要永远.这样可以在理论上尽可能快地上传所有内容.
配置s3以自动清除上传文件夹.
不要使用薄.使用独角兽.几秒钟太长,无法处理薄的请求,但有三到四名工人的独角兽更宽容.
不要使用rmagick.它是复杂图像处理的更好的API,但使用了大量的内存.请改用mini_magick.
你会注意到我没有使用后台工作者.如果你真的感觉很细致,你可以让接收远程url的控制器将其工作传递给后台工作者,如果你需要立即得到结果,后台工作人员可以通过pubsub通知UI(faye或pusher,可能是激动人心的新同步宝石).但这对我的申请来说并不是必需的,而且我宁愿把钱花在另一个网络dyno而不是工作人员dyno上.
而且,是的,如果你想让它们在发生这种情况时点击你的整个应用程序,你将需要在弹出窗口中上传(并使用某种pubsub解决方案),或者将整个网站构建为javascript使用余烬或主干或角或其他的应用.
任何问题?
在你提到之前我从未见过Cloudinary,但它似乎非常适合你的项目.
首先,它可能会大大简化您的应用程序.Cloudinary支持通过其HTTP API 从浏览器直接上传,并且已经有一个基于jQuery文件上传的jquery插件,并具有类似的功能,包括客户端预上载处理.
此外,它支持类似于dragonfly的动态转换(也是一个非常好的lib).
这意味着,除非您确实需要通过应用程序上传这些图像,否则您可以完全绕过它,直接上传到Cloudify并通过转换API处理图像裁剪和其他转换.
如果需要,你可以从你的应用程序中消除Carrierwave和S3,当然不需要任何背景dynos来处理图像处理.此外,它可能会更快(直接上传和即时操作与上传到您的应用,处理,然后上传到云),并将消除通过您的应用上传的带宽.
即使没有直接上传,似乎Cloudinary提供的Carrierwave插件仍然可以使用他们的转换API,从而无需您的应用程序处理图像.
| 归档时间: |
|
| 查看次数: |
5909 次 |
| 最近记录: |