另一个铁轨升级困境

时间:2017-06-05 12:21:04

标签: ruby-on-rails ruby rails-3-upgrade

征求关于升级(或重写?)遗留应用程序的建议。它是一个单页webapp,包含大量动态生成的窗口和表单,大致由

组成
  • .rb文件中的13,000行
  • .erb文件中的11,000行
  • 25,000行javascript(不包括大型第三方库,使其接近60000行)

这是我们系统最终用户的UI,它还有许多核心业务服务(主要用Java编写,有少量Node.js)和相当大的MySQL数据库(> 200GB) 。其中一些服务将AJAX推送到客户端浏览器以进行实时更新。

升级原因

  • 它的红宝石1.8.7,导轨2.3.15。大多数核心代码都是从2009年开始的。这使得它既不安全又难以维护(想想"早于gemfiles存在"。)
  • 该应用程序一直由Java开发人员维护,因为大多数公司的开发人员都被聘为Java开发人员来处理执行业务逻辑的所有其他服务。可以安全地假设这导致了许多人不想破坏任何东西的黑客攻击,当然很多东西都不会以“轨道方式”完成。&#34;。< / LI>
  • javascript也有点混乱。它有一个框架结(原始的Angular偶尔使用; jquery和prototype都在不同的地方争夺$符号。)有7000行的文件。
  • css样式自2009年以来已升级(!)但开始看起来有点累了。我们想要实现一个看起来很尖锐而没有太多前端技能的引导主题,但是现在,如果我们尝试添加bootstrap,那么渲染所有弹出窗口,侧边栏等的代码会严重破坏。 / LI>
  • 现在推送我们的推送服务器,用websockets替换它们会很不错。

上下文

开发团队中有3个人 - 这是我的第一份工作,而且自1月份以来我才一直在这里工作。在另外两个人中,一个人在这里只比我长约4个月,这也是他的第一份开发工作。另一个人是唯一一个与原始团队中某人交谈过的人。

哦,当然我们几乎没有测试覆盖率。

选项

当我被聘用(作为Java开发人员)时,我被告知我们正在寻找用基于Spring MVC的网站替换网站。这项工作部分进行,在几年内遭受了滴水和单调袭击。因为从未见过的不同开发人员攻击它就像是他们自己的全新项目一样,同样的问题在不同的地方以不同的方式解决。他们尝试过一些华而不实的技巧,比如我觉得难以理解的自定义注释,但据我所知,我并不能完全发挥作用。我们中最资深的人估计,我们的团队需要一年的专职全职工作来完成它(这不是一个现实的商业主张,基于我们从客户那里获得多少新功能的请求)。 p>

我倾向于升级网站而不是推出一个新网站。这部分是因为我可以在 post中看到这种感觉。另一个原因是我们所有人都是全职交易全堆栈开发人员(加倍为DBA,系统管理员等......)。我们在UI设计方面没有特别的专业知识,我们现有界面的用户界面虽然过时,但非常方便用户使用;感觉就像一块空白的画布会抛出那个结构,并发挥我们的弱点。升级ruby / rails也会使我们在升级过程中添加的任何功能更容易添加到新站点。

显然,一些经验丰富的红宝石开发人员与我的老板是朋友,他非正式地告诉他,为了使网站更新,它可以与完全重写相媲美,这是动机为春季项目。这样做的好处就是只需考虑Java + javascript,而不是试图雇用熟悉Java和ruby的人。

传统智慧似乎是阶段性的升级。由于两个原因,我不确定这对我们有多好。首先,我们有3个主要版本需要升级,它们之间可能会有重大变化。更重要的是,代码需要一些TLC,无论如何都需要重构和创建测试套件。

我倾向于遵循以下策略:

  1. 将一些开发人员的时间投入到培训中,以了解相关的最佳实践以及&#34; rails方式&#34;做事,而不是&#34;足够好的黑客&#34;我们大多数人现在都有的知识。
  2. 在ruby 2.4.0上启动新的rails 5.1项目
  3. 配置活动记录以使用我们的旧数据库
  4. 将现有项目的公共文件夹中的javascript复制到资产管道的相关部分,为第2阶段和第34阶段保存这个令人头疼的问题。
  5. 使用更新版本的依赖项对gemfile进行排序(例如,mysql gem已被mysql2 gem替换。)此时安装rubocop似乎是一个好主意。
  6. 一次一个地将文件从旧项目复制到新项目。阅读代码,弄清楚它在做什么,编写相关测试,修复它们中断的位置。使用ruby API和rails升级指南更新语法。重构直到rubocop被安抚。
  7. 一旦我们重现了现有网站的功能,请写一篇关于如何整理javascript的新stackoverflow帖子;)
  8. 这当然听起来像很多工作,但似乎不太可能产生错误的混乱,而不是试图用不同的语言从头开始重现我们现有的功能。所以......

    问题

    1. 这个策略看起来合情合理吗?这是重写的确是一个更好的选择吗?单独处理JS是最好的调用,还是在重构它时更好,因为我们正在从视图中检查对它的调用?或者我们真的升级 - &gt; 3.0,3.1,... 5.0,5.1?
    2. 我们手动更改了数据库,直接添加了新表,新字段等,而不是使用。rails generate。 &#39; Rails魔术&#39;似乎目前使这项工作成功,但我们应该预测第3步中的问题吗?
    3. 是否有任何逻辑顺序可以接近ruby的迁移?由于路由的主要变化是应用程序的中心入口点,从那里开始,然后是身份验证,然后是主页面,然后一次添加一个函数似乎是明智的。
    4. 部分问题是&#34;不知道我们不知道&#34;关于铁路的做事方式。除了规范的Ruby / Rails教程(Hartl,Ruby Monk,Ruby Koans,Kehoe的轨道书)之外,在尝试承担这么大的工作之前,我们应该注意哪些必要的阅读材料?我特别想到可能不会立即显而易见的事情,比如正确使用辅助函数,模块结构等。
    5. 任何其他建议,评论,祈祷,......欢迎!

0 个答案:

没有答案