Rails как фильтрующий обратный прокси - PullRequest
0 голосов
/ 04 октября 2011

Я бы хотел постепенно перевести приложение из старой Java в новое приложение rails.Поток данных будет выглядеть так:

user -> browser -> new rails -> old java

То есть новое приложение rails будет функционировать в качестве обратного прокси-сервера для старого приложения, и пользователь никогда не станет мудрее исходного приложения.

По мере переноса большей функциональности в приложение rails приложение java будет использоваться все реже и реже.

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

  • обрабатывать общие глаголы HTTP
  • передавать и сохранять куки
  • переписывать HTML из старого приложения (например, старого приложения)будет иметь href = "/ что-то / foo.html", а новое приложение будет иметь "/newpath/bar.html")
  • иметь настраиваемую осведомленность о сеансе (связать sessionID в приложении java с сеансом rails, например, если вы удалите сеанс rails, он может вызвать обратный вызов Java-приложения с выходом из системы)

Производительность не является большой проблемой.

Есть ли какие-нибудь указатели на такой драгоценный камень?Вероятно, это будет классифицироваться как некий обратный прокси-сервер, человек-посредник, фильтр и т. Д.

1 Ответ

0 голосов
/ 04 октября 2011

Я бы предложил не делать это в самом Rails, а делать это прямо в вашем веб-сервере (например, Apache)

Я работал над большим проектом по переносу веб-сайта Java на Ruby и для этого использовал Apache mod_rewrite и mod_proxy.

Так что поток был

    user -> browser -> apache -> passenger or Tomcat

Использование модулей внутри самого Apache означало, что нам не нужно было использовать какой-либо стек Rails (и связанные с ним ЦП / память / потоки). Это также позволило нам выполнить одно из ваших требований, чтобы гарантировать, что «пользователь никогда не станет мудрее оригинального приложения»

Управление сессиями - единственная сложная часть этого процесса; Я ввел cookie, которые Java-приложение и приложение Rails могли одновременно читать, и использовал их наличие, чтобы сообщить Ruby или Java, если пользователь вошел в систему. Таким образом, Ruby и Java не нужно было пытаться управлять сеансами друг друга.

Надеюсь, что-нибудь из этого окажется полезным?

...