我即将开始一个项目,需要支持大型的二进制文件.我想使用Ruby on Rails作为webapp,但我关心BLOB的支持.根据我对其他语言,框架和数据库的了解,BLOB经常被忽视,因此具有差,难,和/或错误的功能.
RoR是否充分发布BLOB?一旦您已经致力于Rails,是否有任何障碍?
BTW:我想使用Postgresql和/或MysqL作为后端数据库.显然,底层数据库中的BLOB支持很重要.目前,我想避免专注于DB的BLOB功能;我对Rails本身的反应更感兴趣.理想情况下,Rails应该从我隐藏数据库的细节,所以我应该可以从一个切换到另一个.如果不是这种情况(即:使用特定DB的Rails有一些问题),请提及它.
更新:此外,我不只是在这里谈论ActiveRecord.我需要处理HTTP端的二进制文件(文件上传有效).这意味着通过Rails访问适当的HTTP头和流.我已经更新了问题标题和描述,以反映这一点.
解决方法
1为attachment_fu
我在我的一个应用程序中使用attachment_fu,并且必须将数据存储在数据库中(因为令人讨厌的原因超出了本Convo的范围).
我发现(BLOG)的(一个)棘手的事情是,你需要一个单独的代码路径来发送数据给用户 – 你不能简单地在文件系统上一个路径,就像你会是一个简简文件.
例如如果您存储头像信息,您不能简单地做:
<%= image_tag @youruser.avatar.path %>
你必须编写一些封装逻辑并使用send_data,例如(以下只是一个例子,附件_fu,实际上你需要干这个)
send_data(@youruser.avatar.current_data,:type => @youruser.avatar.content_type,:filename => @youruser.avatar.filename,:disposition => 'inline' )
不幸的是,据我所知,attachment_fu(我没有最新版本)没有为你做巧妙的包装 – 你必须自己写.
附:看到你的问题编辑 – Attachment_fu处理你提到的所有烦人的东西 – 关于需要知道文件路径和所有的废话 – 除了存储在数据库中的一个小问题.试一试;这是rails应用的标准.如果你坚持重新创造轮子,附件的源代码应该记录大部分的错误!