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

时间:2009-04-21 21:17:44

标签: ruby-on-rails upgrade

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

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

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

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

  • 改进或新功能,为我提供更多升级理由
  • Rails更改需要我修改我的应用才能使用新版本。

(我已经看到this question关于升级的机制,但是我对我应该尽可能轻松地进行升级的过程更感兴趣。)

7 个答案:

答案 0 :(得分:4)

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

http://gist.github.com/99535

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

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

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分: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' %>变为`&lt;%form_tag:action =&gt; 'search'do%&gt;否则你会得到一些有趣的错误消息
  • 同样将<%= end_form_tag%>更改为关闭块,如“&lt;%end%&gt;”
  • 检查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服务器的数据库迁移工具。

答案 3 :(得分:1)

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

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

此外,除了您在2.2&amp; 2.3,源本身应该有发行说明或更改日志。另外,您可以使用“rails x.x.x新功能”等搜索字词搜索博客帖子(使用谷歌博客搜索)。

答案 4 :(得分:0)

我将首先回答我自己的问题,我已经设法通过我的谷歌搜索引出了资源。 Rails 2.2 release noteRails 2.3 release note提供了这两个版本中新功能和更改功能的详细信息,但我找不到任何早期版本的确定性。

除了提到旧版本的Passenger不能与Rails 2.3一起使用的this release announcement之外,我还没有找到更多关于升级时会破坏的内容。

答案 5 :(得分:0)

我发现那些文档缺少一些细节,并从2.1 =&gt; 2.2花了很长时间。以下是我的笔记:

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

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

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

答案 6 :(得分:0)

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

我在一个相对简单的应用程序中遇到的最大突破是Pagination。我发现Classic Pagination插件对此来说是天赐之物。