我一直在寻找Rails文件上传工具,其中对我最有吸引力和趣味性的是CarrierWave和Dragonfly。
从我的调查来看,CarrierWave采用更传统的方式,在保存时可以处理文件,而Dragonfly则是中间件,因此可以实现即时处理。
我想知道人们是否有任何性能测试或比较这两个工具的测试的参考资料。
另外,只是好奇人们对两者的意见,以及他们喜欢哪一个,当然要说明原因。
我一直在寻找Rails文件上传工具,其中对我最有吸引力和趣味性的是CarrierWave和Dragonfly。
从我的调查来看,CarrierWave采用更传统的方式,在保存时可以处理文件,而Dragonfly则是中间件,因此可以实现即时处理。
我想知道人们是否有任何性能测试或比较这两个工具的测试的参考资料。
另外,只是好奇人们对两者的意见,以及他们喜欢哪一个,当然要说明原因。
根据设置而定。正如Senthil所写,只要您在前面加上缓存代理,Dragonfly就可以正常工作。
但如果您使用内置的Rails缓存,则Carrierwave会表现更佳,因为文件可以在没有任何处理的情况下加载。如果你不做任何处理,那就没关系了。
以下是我在考虑使用Mongomapper项目的图像时对两者进行综合评估的方法:
Carrierwave:
Dragonfly:
最终我最终使用了两者。
未来的愿望是Carrierwave再次支持MongoMapper。在各种情况下使用两者之后,我发现MongoMapper(rails3分支)中的功能始终有效,并且可以使用插件轻松扩展。目前不能说Mongoid是一样的,但这可能会改变。
我使用Dragonfly,只是因为CarrierWave停止支持MongoMapper,而且没有一些hack的情况下,Paperclip无法在MongoMapper上工作。
Dragonfly可以实时处理,即
应该用在高速缓存代理之后,例如Varnish、Squid或Rack::Cache之类的代理,这样第一次请求可能需要一些时间,但随后的请求应该非常快速!
Paperclip是一个简单的文件附件库,旨在为Active Record提供支持。它的目标是尽可能简化设置,并尽可能像处理其他属性一样处理文件。这意味着它们不会保存到磁盘上的最终位置,也不会在设置为nil时被删除,直到调用ActiveRecord::Base#save
方法。如果需要,它可以根据大小和存在性进行验证。如果需要,它可以将分配的图像转换为缩略图,而前提条件就是安装ImageMagick(对于大多数现代基于Unix的系统来说,这非常容易,只需安装正确的软件包即可)。附加文件保存在文件系统中,并通过易于理解的规范在浏览器中引用,具有明智且有用的默认值。
@user.avatar = nil @user.save
这个宝石提供了一种简单而极其灵活的方式来从Ruby应用程序上传文件。它与基于Rack的Web应用程序(如Ruby on Rails)配合得很好。
image
属性,用于引用上传的图像。image_tag @product.image.thumb('150x150#')
成为可能。其他人已经写了相当不错的总结,我只想说从我们的经验来看,Dragonfly的设置需要更多的维护,由于一些开发人员的疏忽,我们也被卡在了很多孤立的图片上,这些图片在原始图片被删除后仍然存在。如果使用普通的carrierwave就不会出现这种情况。
顺便说一句,我们已经迁移到了cloudinary(并且与之一起使用carrierwave),非常满意。