Один из подходов, который вам может пригодиться, - это использование возможностей вашего веб-сервера для правильной перезаписи и делегирования запросов двум разным системам.Если вы можете спроектировать ваше новое приложение 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, использующей ваши существующиеданные или, по крайней мере, данные, относящиеся к новой функциональности, которую вы намереваетесь создать.