`
aegoose
  • 浏览: 40049 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Rails 3.1新特点及升级时一些插件问题

 
阅读更多

原来的系统用的是rails 3.0.4, 出于对提高js开发效率的考虑, 想升级rails 3.1.0以上版本, 不过由于原系统插件绑定的太深了,许多功能都不能适应到rails 3.1的升级, 最后放弃对rails 3.1的升级, 但事实上rails 3.1确实有一些新的特性功能, 值得一用.


一些对rails 3.1兼容的插件问题:
  • mysql2的问题
rails 3.0.4使用可以使用mysql2(0.2.6), 但rails 3.1更新了activeRecord的一些方法, 需要使用 mysql2 新版本(0.3.x)来支持.
而mysql2的新版本又依赖于更高版本的mysql, 比较支持mysql 5.5, 以及需要mysql connector C的支持
最佳方式是升级mysql到5.5, 但代价会很大.
  • controller下的参数问题
param[:id] 是rails通过get/post传过来的参数, rails 3.0.4自动解析成integer, 而rails 3.1.1则解析成string
因此在controller的代码上需要做一些转型. 如: id = param[:id].to_i, 而不是id = param[:id]
  • will_paginate问题
rails 3.1+的will_paginate仍然不能使用git上的master版本. (当前的版本是3.0.2), 而要使用:
"gem 'will_paginate', '~> 3.0.pre2'"
  • 表单生成的问题
rails 3.0.4中的用 form_for(@user) 生成html时, 对于 submit()的helper, 会生成 <input type="submit" id="user_submit" ... />
rails 3.1.1中则是: <input type="submit" id="submit" />
所以特别是使用了cucumber及Capybara时, 则需要修改场景中所有与submit的id相关的代码, 不然会出错不通过.
  • attr_cleaner插件不支持rails 3.1.1
之前用attr_cleaner来自动strip一此param参数, 不过attr_cleaner标明只支持acitiveRecord3.0的.
所以必须放弃此插件. attr_cleaner较简单, 可以自己写一个model的filter的.
  • 其他
rails 3.1.0有assets的概念, 而rails 3.0.4没有这个概念, 所有的资源文件都放在public路径下, 所以使用assets, 将会让你对静态资源, 如css, js, image的存储策略作适当的调整, 这个需要花一定的时间去理解整个assets的概念, 并调整原系统.
如rspec升级到最新版本(2.7), devise可升级到最新版本, sunspot没有受到影响, i18n没有变化.
还有其他问题, 因为最后放弃升级系统, 没有往下研究.

如果原系统绑定太多的插件, 则会影响到rails的升级. 必须权衡rails新功能与系统的直接关系, 做出选择, 并放弃一些插件的使用.

不过rails 3.1还是有一些吸引人的东西,之前总是争论到底js文件要不要按插到页面中, 后台代码要如何融合到js中, 以及不同页面的js要用什么的策略去分开调用等, assets和coffeeScript比较好的解决这个问题.

可以参考这个PPT, 简短介绍了rails 3.1 吸引人的地方:


InfoQ也有人作了很好的分析:


[转]Ruby on Rails 3.1发布了,带来了Assets Pipeline、流和JavaScript的改变

作者Mirko Stocker译者李永伦发布于 2011年9月19日


前段时间,Ruby on Rails组发布了最受欢迎的Ruby Web框架的3.1版本,时间几乎是上一个主要版本Rails 3.0发布一年之后。这个版本包含了以下重要特性:
  • Assets Pipeline
  • 可逆迁移
  • 把jQuery作为默认的JavaScript库

Assets Pipeline是Rails的主要更新,有个完整的指南讲述了如何使用它以及它能做什么:

Assets Pipeline提供一个框架串联并缩减或压缩JavaScript和CSS。它还允许通过其它语言编写它们,比如说,CoffeeScript、Sass和ERB。

Assets Pipeline也是David Heinemeier Hansson在RailsConf上的演讲内容

是指Rails现在支持HTTP流了,也被称作块状传输编码。流的优点是Web服务器可以在它完全计算完毕之前开始传输。Rails组在他们的博客上解释了流的好处:

流没有减少延迟,也没有减少生成动态响应所需的时间。但因为应用程序立刻发送内容,而不是等到整个响应渲染出来,所以客户端可以尽早请求内容。特别地,如果你刷新HTML文档头,将会以并行的方式获取CSS和JavaScript文件,与此同时,服务器会处理内容的生成。结果是页面加载更快了。

有个Railscast解释了如何为Rails应用程序设置流

Rails已经支持向下迁移一段时间了,那么,为什么说可逆迁移是新的?到目前为止,你都不得不自己写向下迁移,但Rails 3.1现在可以帮你完成这部分工作。Rohit Arondekar解释其中的奥妙

基本上,如果你在你的迁移里定义一个change方法(而不是之前的up和down方法),然后应用迁移,那么命令会照常执行。不过,在逆向迁移的时候,命令会被记录,然后生成一组反向命令并运行之。反向命令只是简单地把原来命令反过来执行。

这些只是Rails 3.1的一部分改变,发布说明里面还有很多等着你去发现。举个例子,强制SSL的配置选项现在支持了。要知道你的插件能否在3.1下工作,请查看railsplugins.org

你打算升级你的应用程序吗?Austin Hughey在他发表到The H上的文章给出了一些建议。

InfoQ中文链接 :http://www.infoq.com/cn/news/2011/09/rails-31

查看英文原文:Ruby on Rails 3.1 Released, Brings Assets Pipeline, Streaming, and Javascript Changes

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics