原来的系统用的是rails 3.0.4, 出于对提高js开发效率的考虑, 想升级rails 3.1.0以上版本, 不过由于原系统插件绑定的太深了,许多功能都不能适应到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的支持(可以通过安装libmysqlclient16获得支持)最佳方式是升级mysql到5.5, 但代价会很大.linux下mysql2(0.3.x)对mysql5.1的支持正常, win7不正常. mysql2插件问题还需深入研究才行.
- 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新功能与系统的直接关系, 做出选择, 并放弃一些插件的使用.
[转]Ruby on Rails 3.1发布了,带来了Assets Pipeline、流和JavaScript的改变
作者 Mirko Stocker 译者 李永伦 发布于 2011年9月19日
- 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