2009-01-23 82 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代碼。

我會留給你解決細節問題!

相關問題