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

我正在研究目前使用Rails 1.2的Rails应用程序,所以我现在已经远远落后于最新的稳定版本(Rails 2.3)。

我应该如何进入更新版本的Rails?

我应该一次升级一个版本还是直接升级到Rails 2.3?

我如何找出Rails版本之间的变化

  • 改进或新function,让我有更多的升级理由
  • Rails更改需要我修改我的应用程序才能使用新版本。

(我已经看到了关于升级机制的这个问题 ,但是我对我应该尽可能无痛地进行升级的过程更感兴趣。)

几个月前我经历了这个过程,进行了大量的研究并整理了一个rake任务(基于别人的脚本和额外的资源),可以帮助你标记要在代码中更改的内容。 这是为了升级到Rails 2.2,所以它没有考虑到Rails 2.3的变化:

http://gist.github.com/99535

哦,请务必检查您使用的插件和gem是否兼容Rails 2.x并使用最新版本。

我绝对同意一次性直接升级到Rails 2.3。 并且不要继续推迟; 没有升级就越久,越难以改变。 并且维护Rails 1.x代码更难,因为支持它的资源更少。

我的建议是花一周的时间来偿还你积累的任何测试债务,然后一下子全部升级。

在我工作的地方,去年夏天我们将一个非常大的应用程序从1.2升级到2.0.2,同时升级到Ruby 1.8.6。

花了比预期更长的时间。 该应用程序使用了一些被删除或弃用的旧function(如ActionWebService),因此转换它们需要一些时间。 但大多数情况下我们遇到了许多微妙的错误,例如单选按钮params如何工作的细微差别,其中一些可归因于Ruby(与Rails)升级。

该应用程序的某些部分有不稳定的测试覆盖率。 如果我们通过更好的测试进入它,那一切都会容易得多。

我刚刚开始将Rails 1.2.3应用程序升级到Rails 2.3.4环境。 我遇到的基本步骤和警告是:

  • 创建类似于基本应用程序的框架应用程序
  • 检查旧应用程序中的任何environment.rb设置,以查看新版本中是否需要这些设置。
  • 将所有.rhtml文件迁移到.html.erb; 使用脚本或手册。 在我的情况下,有100多个文件,所以自动化它更容易
  • 检查可能需要进行的任何routes.rb更改,因为RoR2.3.4已经简化了指定路由。
  • 确保你手头有一个好的SCM系统; 例如Git,SVN甚至CVS,以便捕获小的增量变化。
  • 检查您需要的插件。 在开始时,我只是删除了所有插件,实际上有些已经过时,因为要在移植的应用程序中实现这些function。
  • 更新任何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服务器的数据库迁移工具。

我认为你可以获得一些Rails rake任务,可以在你的app中查找弃用。

只要您的应用程序处于版本控制状态,我就会一次性进行升级,并逐个查看错误消息。

此外,除了您在2.2和2.3中看到的发行说明页面之外,还应该在源本身中发布说明或更改日志。 此外,您可以使用“rails xxx new features”等搜索字词搜索博客post(使用谷歌博客搜索)。

我将首先回答我自己的问题,我已经设法通过我的谷歌搜索来找到资源。 Rails 2.2发行说明和Rails 2.3发行说明详细介绍了这两个版本中新增和更改的function,但我找不到任何对早期版本如此明确的内容。

我还没有发现升级时会发生什么破坏,除了这个发布公告 ,其中提到旧版本的Passenger不能与Rails 2.3一起使用。

我发现那些文档缺少一些细节,从2.1 => 2.2开始花了很长时间。 这是我的笔记:

最大的时间汇: assert_redirected_to已经发生了重大变化,不再支持哈希(根本没有?)

  • 灯塔入口
  • 更多关于Rails 2.2.2下assert_redirected_to的问题

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

如果有人在这些积分上得到2.3的消息那就太棒了。

在这一点上你可能已经有了很多这方面的经验,但是我在搜索不同的Rails 1.2> 2.3升级问题的过程中遇到了这个问题,并且我认为自己会提出一些建议:

我在一个相对简单的应用程序中遇到的最大突破是分页。 我发现Classic Pagination插件对此非常天赐。