如何升级Rails应用程序以使用最新版本的Rails?

4

我正在开发一个使用Rails 1.2的Rails应用程序,因此距离最新稳定版本(Rails 2.3)已经相当长时间了。

我应该如何进行升级过程?

是逐个点版本升级还是直接升级到Rails 2.3?

我该如何查找版本之间的更改,包括:

  • 提供更多升级理由的改进或新功能
  • Rails更改,这将要求我在其能与新版本一起工作之前对我的应用程序进行修改。

(我已经看到了关于升级机制的这个问题,但我更感兴趣的是使升级尽可能轻松的过程。)

7个回答

4
我几个月前也经历过这个问题,做了很多研究并编写了一个rake任务(基于别人的脚本和其他资源),可以帮助您在代码中标记需要更改的内容。这是升级到Rails 2.2的情况,因此不考虑Rails 2.3的更改: http://gist.github.com/99535 请确保检查您使用的插件和gems是否与Rails 2.x兼容,并使用最新版本。
我完全同意直接升级到Rails 2.3。不要一直拖延,你越久不升级,难度就越大,因为会有更多的变化。而且维护Rails 1.x代码更加困难,因为支持它的资源更少。

2
我刚开始将一个Rails 1.2.3应用程序升级到Rails 2.3.4环境。我遇到的基本步骤和注意事项如下:
  • 创建一个类似于您基本应用程序的框架应用程序
  • 检查旧应用程序中的任何environment.rb设置,以查看是否需要在新版本中使用。
  • 将所有.rhtml文件迁移到.html.erb;可以使用脚本或手动操作。在我的情况下,有100多个文件,因此自动化处理更加容易
  • 检查任何可能需要进行更改的routes.rb更改,因为RoR2.3.4简化了指定路由的方式。
  • 确保您拥有一个好的SCM系统;例如Git、SVN甚至CVS,以便捕捉小的增量更改。
  • 检查您需要哪些插件。一开始,我只删除了所有插件,实际上,某些插件对于要在移植应用程序中实现的功能来说是过时的。
  • 更新任何form_tag条目;例如<%= form_tag :action => 'search' %>变成`<% form_tag :action => 'search' do %>,否则你会得到一些有趣的错误消息
  • 同样,将<%= end_form_tag%>更改为关闭块,如`<% end %>
  • 检查您在1.2.3版本中是否有任何插件现在已从核心中删除,并且必须作为插件安装和配置依赖项。我遇到了一些问题,例如in_place_edit和对calendar弹出窗口的调用。

正如其他人所说,它可能需要比预期更长的时间。我花了大约30个小时来进行迁移工作。我估计它要花费更多的时间;所以这很好;但仍然需要更多的工作来使PDF生成正常运行。

只是为了使它更有趣,该应用程序正在运行在一个MS-Windows环境上;Ruby 1.8.7,Rails 1.2.3和MS SQL Server。目标是将其迁移到Linux环境;Ruby 1.9.x,Rails 2.3.4和MySQL数据库,因此涉及MySQl服务器数据库迁移工具。


2
我的建议是花一周的时间来清理你积累的任何测试债务,然后一次性进行升级。我们公司去年夏天将一个非常大的应用程序从1.2版本升级到2.0.2版本,并同时升级到Ruby 1.8.6版本。这个过程比预期的要长得多。该应用程序使用了一些已删除或废弃的旧特性(如ActionWebService),因此转换这些特性需要一些时间。但主要问题在于我们遇到了很多微妙的错误,例如单选按钮参数的细微差异,其中一些归因于Ruby(而不是Rails)升级。应用程序的某些部分测试覆盖率不足。如果我们有更好的测试,所有事情都会更容易。

1

我认为有一些Rails rake任务可以查找您的应用程序中的弃用内容。

只要您的应用程序在版本控制中,我建议您一次性进行升级,并逐个处理错误消息。

此外,除了您在2.2和2.3版本中看到的发布说明页面之外,源代码本身应该还有发布说明或更改日志。此外,您可以使用搜索词“rails x.x.x新功能”等搜索博客文章(使用Google博客搜索)。


0
你可能已经有很多这方面的经验了,但我在寻找不同的Rails 1.2>2.3升级问题时遇到了这个,并想自己提供一些建议:
在一个相对简单的应用程序中,我最大的突破是分页。我发现Classic Pagination插件对此非常有帮助。

0

我发现这些文档缺少一些细节,从2.1 => 2.2 花费了相当长的时间。以下是我的笔记:

最耗时的问题: assert_redirected_to 已经发生了重大变化,不再支持哈希(完全不支持?)

此外,需要设置 environment/test.rb 来禁用伪造保护

如果有人对2.3的这些问题有消息,那就太棒了。


0

我将从回答我的问题开始,使用我通过谷歌搜索到的资源。Rails 2.2 发布说明Rails 2.3 发布说明 分别详细介绍了这两个版本中新的和更改过的功能,但我在早期版本中找不到如此明确的内容。

升级时可能会出现什么问题,除了此发布公告提到的旧版Passenger无法与Rails 2.3一起使用外,我也没有找到其他太多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接