从Rails 2.3升级到Rails 4.0

时间:2014-01-10 12:46:33

标签: ruby-on-rails ruby ruby-on-rails-4

我们有一个应用程序,目前在Rails版本2.3.12和Ruby版本1.8.7上。我们想要将我们的应用程序更新到Rails 4.0和Ruby 2.1.0。我们有大约200个型号和150个控制器。

我想知道进行升级过程有多大的努力。您还可以提供升级后可以遵循的步骤。我们应该首先升级Ruby然后升级Rails,反之亦然吗?

3 个答案:

答案 0 :(得分:9)

你想要实现的目标将是一次史诗般的努力。我无法为您提供分步说明,因为无法在一个答案中涵盖所有案例。

我建议不要相似地升级Ruby和Rails,只需要很小的步骤。

升级本身的复杂性是巨大的,但只要您对应用程序有合理的测试覆盖率,这并非不可能。我真的希望你有考试。如果不这样做,那么您甚至不能考虑开始这样的升级,首先需要确保产品的最小覆盖率。

我的建议是遵循这个路线图

  1. 将Ruby从1.8.7升级到1.9.3。 Rails 2.3应该与Ruby 1.9兼容,你将获得更新的Ruby版本的好处。实际上,有几个宝石已经放弃了对Ruby 1.8的支持。
  2. 让应用程序解决并运行一段时间,以确保您可以找到并修复不兼容性。每次发现问题时,请使用测试重现,然后进行修复。
  3. 将Rails从2.3升级到3.0。
  4. 与第2点相同。
  5. 将Rails从3.0升级到最新的3.x版本。
  6. 与第2点相同。
  7. 将Ruby从1.9.3升级到2.0。升级应该是微不足道的。
  8. 与第2点相同。
  9. 将Rails从3.x升级到最新版本
  10. 一些注意事项

    • 我建议你不要直接从Rails 2.3升级到4,这是因为它几乎是不可能的。
    • 我建议你不要将Rails 2.3直接升级到最新的3.x,这是因为从3.0到3.x有资产管道的新功能会引起你几个令人头疼的问题。最好单独处理这一步,而不是进行大的升级。

答案 1 :(得分:3)

Ruby 1.9处理编码的方式与Ruby 1.8不同。 Rails 2.3没有为此做好充分准备。 这些问题通常会导致硬错误,并且可能发生在意外的地方(例如,当您想要显示错误消息时)

此博客条目中有一个好的(或可怕的)概述: http://www.rvdh.de/2010/01/06/why-you-cant-run-rails-23-apps-on-ruby-19/

我也花了很多时间试图让Rails 2.3.x与Ruby 1.9.x一起使用 (如果你总是使用普通的ascii,也许有可能)

所以你需要首先更新到Rails 3.0然后再更新到Ruby 1.9.3(或同时更新两者)

资产管道在工作时很好,但升级很困难。 所以我会禁用它,直到你使用Rails 4.0。

视图有很多变化,比如form_for helper。 当您拥有至少渲染一次每个视图的测试时,这是很好的。然后,您将获得已更改的事项的弃用警告。 如果这不现实,那么您应该尝试手动测试应用的所有内容,并且 grep日志文件中的弃用警告。 Rails 3.0中的许多弃用将导致Rails 3.1中的错误或错误行为。

答案 2 :(得分:0)

将ruby和rails版本更新为new并不需要花费太多时间,但在代码中你必须更改所有quires和模型范围以及在新ruby和rails中弃用的新rails版本中不起作用的任何内容版本。还有一件事可能是许多支持ruby的宝石1.8.7不支持新的ruby版本和轨道相同的东西。 我的建议只是,你首先检查你的应用程序与新版本的依赖关系并做出决定。我对它有所了解,因为我还从ruby 1.8.7升级了一个完整的应用程序,rails 2.3.5到ruby 1.9.3和轨道3.2.13。