2009-09-03 2 views
0

У нас есть очень редкое приложение Rails, в котором есть два разных раздела: передняя часть и CMS/Admin. Мы хотели бы разбить приложение на две части (для обслуживания, поскольку у нас есть отдельные команды, которые работают на лицевой стороне и обратно, и у них могут быть разные периоды выпуска).Разбиение приложения Rails на два

Одна мысль заключалась в том, чтобы запустить новое приложение Admin 2.0, которое имеет доступ к моделям/схеме из исходного приложения, но имеет свои собственные контроллеры/представления и собственные модели, которые расширяют исходные модели, пока не будет полностью полностью отключено , Это целесообразно? Если нет, то какой будет подходящий план перехода от одной монолитной кодовой базы?

ответ

1

предупреждение, это немного расточительно и никуда не денется.

Работая над очень большим приложением, которое работает в поместье, которое вы описываете (по причинам масштабируемости), у меня все еще есть смешанные мнения (нет окончательных ответов).

В настоящее время мы управляем 3-мя крупными приложениями (+ один или два меньших, которые используют фрагмент схемы).

RVW (наше приложение для администратора): это единственное приложение, которое пишет, работает на одном сервере и отвечает за поддержание схемы.

reevoo.com: электронная торговля, сравнение цен, подобный материал. Это (по историческим причинам работает на несколько иной схеме, работает на ведомом только для чтения RVW, с представлениями базы данных для сопоставления схем). Все записи выполняются путем закрепления вещей в очередях, которые RVW собирает и действует. Это очень хорошо работает , хотя количество случайных проблем, связанных с db (в основном связанных с представлениями), является проблемой. Основная проблема с этим приложением - код совместного использования сложности (драгоценные камни работают хорошо, я часто мечтал привести схемы в соответствие и !. основные модели в гем) Мы разделяем код между приложениями с помощью рубиновых камней и тест с использованием много интеграционных тестов, которые пересекают границы приложения (с помощью drunit (presentation on this available))

reevoomark:... очень высокий b2b приложение нагрузки Это много серверов, каждый из которых имеет полный стек (сервер db, сервер приложений по одному на узел). У них есть базы данных, заполненные экспортным и импортным пакетным заданием db. Это очень хорошо работает в краткосрочной перспективе, гибкость сдвига - это просто туз, но интеграционное тестирование между приложениями очень сложно.

Мой совет будет заключаться в том, чтобы избежать расщепления приложений любой ценой, сохраняя при этом что-то СУХОЙ быстро становится серьезной проблемой. Моим советом было бы придерживаться одного приложения, двух наборов маршрутов (выбранных при запуске переменными среды).

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

Если вы решили сделать раскол, у вас есть хороший набор тестов на уровне креста на высоком уровне. Пользовательские (на приложение) расширения для основного набора моделей звучат как хороший план, хотя с четкими базами кода и командами вы все равно можете получить дубликат кода. Двигатели Rails должны быть хорошим способом совместного использования моделей, но будьте готовы к перезагрузке модели, чтобы стать немного шизофреником.

Удачи вам!

+0

Спасибо за подробный ответ! – rdeshpande

0

У вас есть namespaced your admin controllers? Это был бы относительно простой пункт подразделения, а также избежать многих негативных побочных эффектов разворачивания вашего кода в два приложения.

+0

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

+2

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

Смежные вопросы