Объединение двух приложений рельсов в одну кодовую базу - PullRequest
8 голосов
/ 19 ноября 2010

Наша компания начинала с одного продукта - приложения rails, поддерживаемого некоторыми java-сервисами, затем решила, что им нужен другой продукт, который изначально значительно отличался от первого, но со временем мы поняли, что они начинают сходятся, и изменение кода одного требует изменения кода, аналогичного другому, для новой функции / исправления ошибки. Это очевидно становится болью.

В некоторых случаях у нас есть гемы, которые разделяют некоторые из этих функций, но они выходят за рамки ruby ​​в javascript, css и т. Д.

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

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

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

Или, если у кого-то есть другие предложения о том, как объединить эти приложения, я весь слух.

Оба они являются приложениями Rails 2.3.10, работающими на JRUBY 1.5.3, но мы открыты для возможного обновления до Rails3, если это значительно упростит или сделает его чище (т.е. с лучшей интеграцией в Rack)

Я не занимался программированием в Rack, но никогда не повредит узнать, не облегчит ли это нашу жизнь.

Ответы [ 2 ]

2 голосов
/ 20 ноября 2010

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

Что касается переписывания функциональных возможностей для одного приложения, выберите его с большим набором готового кода в качестве основы.Должна быть предусмотрена возможность переноса кода для каждого метода с использованием веб-сервера, поддерживающего перезапись URL.Я думал об использовании Apache с mod_rewrite.Таким образом, план будет следующим:

  1. Настройка обоих приложений для доступа через один Apache.
  2. Выберите один метод, который похож в обоих, и переписайте его в одном приложении для поддержки требований обоих приложений.
  3. В apache добавьте правило mod_rewrite, чтобы перенаправлять трафик в одно приложение только для этого действия.
  4. Переходите к пункту два, пока все не будет переписано.
  5. Удалите старое приложение и настройте его.routing / mod_rewrite для использования одного приложения

Вам не нужно использовать apache, должны быть другие веб-серверы, поддерживающие перезапись URL.

Я думал об использовании этого алгоритма для перезаписинаше приложение к рельсам 3.0.

1 голос
/ 24 ноября 2010

Я бы посоветовал вам использовать двигатели.

Для маршрутизации я бы обработал это вне Rails.

Например, вы должны сделать следующее в nginx:

server {
    # Match only one host.                                                      
    listen 80 default;
    server_name YOUR_SINGLE_APP_DOMAIN;

    location / {
        upstream YOUR_SINGLE_APP_RAILS;
    }
}


server {
    # Fall thru and match any other host.                                                      
    listen 80 default;
    server_name ~^.*$;

    location / {
        upstream YOUR_MULTI_DOMAIN_APP_RAILS;
    }
}
...