Лучшие практики для доступа к данным между приложениями Rails? - PullRequest
1 голос
/ 08 ноября 2011

У меня есть два приложения Rails, данные которых довольно взаимозависимы.Если бы мне нужно было легко получить доступ к моделям другого приложения в Django или иным образом поделиться ими, это было тривиально, поскольку я просто включил бы оба приложения в свой проект и смог бы импортировать модели другого приложения.В этот момент я мог просто получать доступ к объектам в базе данных другого приложения, используя ORM Django, и это было согласованно и потрясающе.

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

  1. Сделать GET-запрос к приложению A
  2. Приложение A должно получить данные из приложения Bтаким образом, он отправляет запрос GET к перехватчику API для приложения B.
  3. Как часть функции в контроллере B, ему нужны данные, которые являются частью модели данных A, поэтому он выполняет запросы к A.
  4. Шаги 2-3 выполняются подряд

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

В конечном счете,мои вопросы: 1) есть ли более прямой подход к получению данных другого приложения Rails, чем выдача GET-запроса, или я просто пытаюсь использовать действительно великолепный дизайн таким образом, чтобы убить его?и 2) Если я борюсь против структуры шаблона проектирования, и это действительно отличный подход, есть ли какой-нибудь общий совет, который вы можете предложить, который поможет мне не допустить зависимости данных в этих приложениях друг от друга, что приведет к гонке?такие условия?Я понимаю, что мог бы передать информацию, которая понадобится приложению B, от A заранее (сейчас это только одно поле, но может быть позже), но действительно ли это right ?

Ответы [ 2 ]

2 голосов
/ 08 ноября 2011

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

Если они так тесно переплетены, я не уверен на 100%, что одно или оба приложения делают это правильно.

0 голосов
/ 07 февраля 2012

Я также случайно обнаружил, что Mongoid поддерживает несколько баз данных, что позволяет нам делать точно то, что я собирался сделать: http://mongoid.org/docs/installation/replication.html

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