2009-01-23 26 views
3

我有一个非常大的Ruby on Rails应用程序,我想移植到PHP 5.2或者PHP 5.3(如果5.3发布)。将Ruby/Rails应用程序移植到PHP 5

我一直在寻找一种方式来自动转换简单的东西,如简单的类和ERB模板。我希望在语言太不相似的情况下,我必须自己做更复杂的事情。

任何人都可以提出一个方法来做到这一点?或者可以自动化一些脚本的脚本?

编辑:

有一个商业案例这样做。这是否是一个良好的商业案例是另一个我不想在这里讨论的问题。我们有一个与Rails相似的框架 - 真正的问题是从Ruby转换到PHP,而不是Rails转换为PHP。我并不是在寻找能够神奇地完成所有工作的东西,只是一件简单的事情就会引发一场头疼的事情。即使它所作的只是改变:

def somemethod somearg 
    some.ruby.code 
end 

到:

public function somemethod($somearg) { 
    // some.ruby.code 
} 

,离开了内脏红宝石在PHP评论认为,仍然使工作更容易。

理想情况下,会有东西在那里,这样做或类似已经。否则,我可能必须自己写作工具。

+0

我不是故意冒犯,只问好奇,你为什么要这么做? – Tom 2009-01-23 06:37:43

+0

即使您移植到Rails克隆框架,这也不是一件小事。我不嫉妒你,并建议不惜一切代价(特别是如果它只是愚蠢的东西像你的新共享主机没有Rails支持 - 找到另一个) – 2009-01-23 06:49:00

回答

1

我完全同意troelskn,这是一个巨大的承诺,我认为你将很少运气找到任何形式的移植应用程序的自动化过程。

最好的办法是找到一个设计非常类似的框架,并逐个移植所有的类。

这里最枯燥的事情将是数据库涉及的地方。据我所知,PHP仍然没有ORM解决方案,甚至接近Rails的ActiveRecord。你必须自己编写大量的数据库代码粘合代码,并自己编写所有的模型查找工具等。自上次检查以来,这方面可能有所改进,但PHP本质上与ActiveRecord设计模式存在一些问题。

同样,我必须回应我相信很多人都在想...为什么要在地球上想要将应用程序从RoR移植到PHP。这听起来像是一件昂贵的事情,无论在时间上还是金钱上,都没有明显的优势 - 除非你已经用Ruby做了一堵墙,因为它无法完成PHP所能做的一切。我觉得这很难相信。

6

在任何两种语言之间移植应用程序是一项不小的工作。在这种情况下,更糟糕的是,由于php和ruby之间的差异。你不能希望为此获得任何类型的自动化过程。

如果你需要做到这一点(和为什么是对自己一个不同的故事),你可以尝试使用PHP的框架在设计上最接近轨之一。最好的候选人可能是SymfonyMaintainable PHP Framework

但我想知道 - 你有什么理由承担这项工作?

编辑:

在PHP中,有很多的符号是全局的,不可改变的,一旦确定。例如,类和函数不能重新定义,也没有名称空间支持。在ruby中,它有可能 - 也是非常常用的 - 在运行时操作类。这是不可能自动转换的,并且在很多情况下只是不可能做到。即使你用phps魔法(__get/__set/__call)攻击它,性能损失会非常严重,以至于它会导致应用程序无法使用。唯一的办法就是手工操作。

你也许可以使用一个工具,如rumld给你一个起点。另请参阅this,了解更多ruby-to-uml工具。

3

让我告诉你一个关于自动化程序转换的故事......

几年前,我曾在一个教育机构。这家教育机构运行了一个基于$ ENTERPRISE_DB_VENDOR的ERP系统,并且已经这样做了大约20年。原始系统是用COBOL &一些$ ENTERPRISE_DB_VENDOR报告工具/语言编写的。多年来,报告工具已被弃用(并添加了C)。在某个时候,$ ENTERPRISE_DB_VENDOR杀死了该工具。不幸的是,仍然有重要的组件编写。

'最简单'的解决方案是为$ ERP_VENDOR的一位优秀开发人员编写一个转换工具,将报表工具转换为C.几乎无法辨认,显然是由计算机生成的,但功能仍然完美C.从我所了解的计划是,这将成为现在使产品正常工作的权宜之计,但这些事情将会很快被人工重写。

向前推进10年......我的第一个任务之一是在网上发布一些报告 - 这是一份最初以旧报告语言编写的报告。然后它被转换为C.它从来没有被重写过 - 人们只是做了“小改动”来添加小功能或修复错误。是。他们正在进行并对计算机生成的C进行更改。在考虑尝试编写自动转换工具之前,先考虑一下这一点。

1

只是一个随机的脑电波,可以帮助

使用JRuby中获得JVM中间语言代码,然后生成的PHP代码。

我会留给你解决细节问题!

相关问题