Портировать приложение Ruby / Rails на PHP 5 - PullRequest
3 голосов
/ 23 января 2009

У меня есть очень большое приложение Ruby on Rails, которое я хотел бы перенести на PHP 5.2 или, может быть, PHP 5.3 (если когда-нибудь выйдет 5.3).

Я искал какой-то способ автоматического преобразования простых вещей, таких как простые классы и шаблоны ERB. Я ожидаю, что мне придется самому делать более сложные вещи в тех случаях, когда языки просто слишком разные.

Может кто-нибудь предложить подход для этого? Или скрипт, который может автоматизировать некоторые из них?

EDIT:

Для этого есть экономическое обоснование. Является ли это обоснованным экономическим обоснованием - это еще одна проблема, которую я не хочу обсуждать здесь. У нас есть фреймворк, который достаточно похож на Rails - реальная проблема заключается в преобразовании Ruby в PHP, а не в Rails в PHP. Я на самом деле не ищу что-то, что волшебным образом выполнит всю работу, просто что-то простое, что даст старт. Даже если все, что он сделал, было изменено:

def somemethod somearg
  some.ruby.code
end

до:

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

и оставил внутренности как ruby ​​в комментариях php, которые все равно облегчили бы работу.

В идеале было бы что-то, что уже делает это или подобное. Иначе мне самому понадобится инструмент записи.

Ответы [ 5 ]

6 голосов
/ 23 января 2009

Это нетривиальная попытка портировать приложения между любыми двумя языками. В этом случае это еще хуже из-за различий между php и ruby. Вы не можете надеяться получить какой-либо автоматизированный процесс для этого.

Если вам нужно это сделать (а почему - это отдельная история), вы можете попробовать использовать одну из php-фреймворков, ближайшую по дизайну к рельсам. Лучшими кандидатами, вероятно, являются либо Symfony или Поддерживаемая PHP Framework .

Интересно, хотя - какова ваша причина для этого начинания?

EDIT:

В php многие символы являются глобальными и неизменяемыми после определения. Например, классы и функции не могут быть переопределены, и также отсутствует поддержка пространства имен. В ruby ​​возможно - и очень часто используется - манипулировать классами во время выполнения. Это невозможно преобразовать автоматически, и во многих случаях это просто невозможно сделать. Даже если вы взломали его с помощью магических методов phps (__get / __set / __call), снижение производительности будет настолько серьезным, что сделает ваше приложение непригодным для использования. Единственный способ сделать это вручную.

Возможно, вы могли бы использовать инструмент, такой как rumld , чтобы дать вам отправную точку. См. Также this , для дополнительных инструментов ruby-to-uml.

3 голосов
/ 23 января 2009

Позвольте мне рассказать вам историю об автоматизированном преобразовании программ ...

Несколько лет назад я работал в учебном заведении. В этом учебном заведении использовалась ERP-система на основе $ ENTERPRISE_DB_VENDOR, и она делала это около 20 лет. Первоначальная система была написана на языке COBOL и некотором инструменте / языке отчетов $ ENTERPRISE_DB_VENDOR. За эти годы инструмент отчетности устарел (и C был добавлен). В какой-то момент $ ENTERPRISE_DB_VENDOR убил инструмент. К сожалению, все еще были написаны важные компоненты.

«Самым простым» решением было для какого-то блестящего разработчика в $ ERP_VENDOR написать инструмент преобразования, который перевел бы инструмент отчета на C. Почти не поддающийся расшифровке, очевидно, сгенерированный компьютером, но все еще отлично работающий C. Из того, что я понимаю, план было то, что это будет временной мерой, чтобы заставить продукт работать сейчас, но эти вещи будут переписаны, вручную, «скоро».

Прыжок вперед на 10 лет ... одним из моих первых заданий было опубликовать какой-нибудь отчет в Интернете - отчет, который изначально был написан на старом языке. Затем он был преобразован в C. Он никогда не переписывался - люди просто делали «небольшие изменения», чтобы добавлять небольшие функции или исправлять ошибки. Да. Они входили и вносили изменения в компьютерную версию C.

Подумайте об этом минутку, прежде чем пытаться написать инструмент автоматического преобразования.

1 голос
/ 23 марта 2012

Этот рубиновый камень утверждает, что может конвертировать ruby ​​в php. Не проверял, но стоит попробовать. https://rubygems.org/gems/php http://php.rubyforge.org/

1 голос
/ 24 января 2009

Просто случайная мозговая волна, которая может помочь

Используйте JRuby для получения кода промежуточного языка JVM, а затем сгенерируйте код PHP из этого.

Я оставлю это вам на детали!

1 голос
/ 23 января 2009

Я полностью согласен с troelskn, это масштабное мероприятие, и я думаю, что вам будет очень мало удачи в поиске какой-либо формы автоматизированного процесса портирования приложения.

Ваш лучший выбор - найти структуру, которая очень похожа по дизайну, и портировать все классы один за другим.

Самым утомительным здесь будет то, где задействована база данных. Насколько я знаю, до сих пор нет решения ORM для PHP, которое было бы близко к ActiveRecord Rails. Вы должны будете написать много кода для склеивания кода базы данных и написать все искатели моделей и т. Д. Самостоятельно. Возможно, в этой области произошли некоторые улучшения с тех пор, как я проверял в прошлый раз, но PHP по своей природе имеет некоторые проблемы с шаблоном проектирования ActiveRecord.

Опять же, я должен повторить то, что, я уверен, многие люди думают ... почему на Earth вы хотите портировать приложение с RoR на PHP. Звучит как дорогая вещь, как по времени, так и по деньгам, без явного преимущества - если, конечно, вы не попали в стену с Ruby, где он просто не может сделать то, что может сделать PHP. И мне трудно в это поверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...