CakePHP и Rails: медленно перенести старые функции php на новые рельсы - PullRequest
1 голос
/ 27 апреля 2011

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

Есть ли способ написать новые функции в приложении rails, поддерживая и предоставляя доступ ко всем функциям старого php (и наоборот)?

Кажется, мне нужно приложение с поддержкой маршрутизации для отправки запросов на php или rails, но затем мы сталкиваемся с проблемой, например, существующей пользовательской функциональности, написанной на php, недоступной для приложения rails, и наоборот. .

Как насчет того, чтобы перевести ruby ​​на php? Таким образом я мог бы начать писать свои модели в ruby ​​/ rails, а не в php.

Я чувствую, что мой вопрос запутан тем, что я не знаю, как задавать вопросы, на которые я хочу ответить, так что, надеюсь, это понятно.

Как всегда, заранее спасибо!

1 Ответ

2 голосов
/ 27 апреля 2011

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

Apache имеет очень полнофункциональную систему перезаписи и проксирования URL, которая может быть настроена так, чтобы перенаправлять «устаревшие» части вашего сайта в существующий набор сценариев PHP, направляя весь остальной трафик нановое приложение Rails.Вы должны быть осторожны, чтобы убедиться, что дизайн обоих приложений практически идентичен, или это может показаться странным для пользователей.

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

Таким образом, вы можете сохранитьсуществующие функции и встроить их в ваше новое приложение.Вы можете использовать что-то такое простое, как open-uri или гем curb для обработки этого делегирования уровня HTTP.

В итоге вы получите контроллеры, которые выглядят так:

class PaymentController < ApplicationController
  def index
    @content = fetch_legacy_url('/payments/index.php'))
  end
end

Метод fetch_legacy_url создает запрос HTTP-выборки, который включает в себя требуемые заголовки, файлы cookie и т. Д., И возвращает тело ответа.Ваш взгляд в итоге будет выглядеть примерно так:

<%= @content =>

Оттуда вы можете по частям шунтировать части макета PHP в приложение Rails.Например, удаление больших кусков статического HTML и помещение их в шаблон Rails уменьшит объем фактического PHP-кода, который вы должны портировать.

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

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

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