这是我到目前为止使用的
> Jquery文件上传:允许用户拖放图像
> CarrierWave:使用ImageMagick处理图像并调整大小
> Amazon S3:CarrierWave通过雾上传图像到Amazon S3
> Heroku:主办
我想允许用户能够将大量图像拖放到页面上,然后在后台进行上传时导航到其他页面.我也喜欢在完成上传时出现图片.我不希望这个过程锁定Heroku的动力,所以我可能需要把工作转移到后台工作,但我不知道该怎么用于我的情况.
什么是这种类型的应用程序的最佳设置?我应该使用什么背景工作宝石?是否是一个好主意?
解决方法
>不要上传到heroku.您的整个网络工作者将在整个上传期间被锁定.那是一分钟不能接受的.
>使用javascript上传器(如jquery-file-upload)直接上传到s3.这首先有点复杂,但一旦你得到它的工作,它是太棒了.您可以使用s3_direct_upload宝石,或者您可以阅读其来源,从头开始制作自己的解决方案.那颗宝石是基于railscasts pro集,你必须支付,但有source available.
>上传完成后,向您的应用发出一个ajax请求,通过新的s3网址作为remote url. Carrierwave将像s3一样处理像上传的图像,只有几秒钟,而不是一分钟.
>使用jquery-file-upload的client-side image resizing.有人会尝试上传一张5MB的照片,然后踩上上传将永远.这将使所有上传速度在理论上尽可能快.
>配置s3到clear your uploads folder automatically.
>不要用薄.使用unicorn.几秒钟太长,无法处理薄的请求,但是三到四个工人的独角兽更加宽容.
>不要使用rmagick.这是一个更好的API复杂的图像处理,但使用惊人的内存量.改用mini_magick.
你会注意到,我没有使用任何后台工作者.如果你真的很细心,你可以让接收到远程URL的控制器将其工作传递给后台工作人员,如果你立即需要结果,后台工作人员可以通过pubsub通知用户界面(faye或者push,可能是令人兴奋的sync宝石).但是这对于我的应用程序来说并不是必需的,我宁愿把钱花在另一个网络动画上,而不是一个工人的动力.
而且,是的,如果您希望让他们点击您的整个应用程序,那么您将需要在弹出窗口中上传(并使用某种pubsub解决方案),或将整个网站构建为javascript应用程序使用ember或骨干或角度或任何.
任何问题?