Как совместно использовать базу данных, миграции и модели между проектами Rails?
Я знаю, что в Stackru уже есть некоторые вопросы на этот счет, но они, как правило, устарели и неадекватно отражают, как должны работать миграции в следующем сценарии, который должен быть довольно распространенным:
- У вас есть какое-то приложение, реализованное в Rails.
- У вас есть какое-то приложение администратора для ваших данных, и это отдельное приложение, реализованное в Rails.
- Оба приложения работают с одной базой данных и моделями.
Мой вопрос: каков наилучший способ разложить наши модели так, чтобы оба этих приложения не дублировали код модели?
Мы обеспокоены следующим:
- Для общих моделей, где должны жить миграции баз данных?
- Что, если каждое отдельное приложение желает добавить дополнительные модели поверх общих моделей? Где живут эти миграции?
- Каков наилучший способ перенести существующие миграции в предлагаемую схему общей миграции?
Благодарю.
1 ответ
Я не знаю, если это подход, и хотел бы увидеть другие идеи, но что мы делаем в одном из наших продуктов, который соответствует этой модели:
Для общих моделей, где должны жить миграции баз данных?
Мы держим все наши миграции в системе администратора. Вам не нужно, чтобы они существовали дважды, вот куда они идут.
Что, если каждое отдельное приложение желает добавить дополнительные модели поверх общих моделей? Где живут эти миграции?
Мы делимся всеми моделями. Это может относиться только к одной заявке на данный момент, скажем - favourited_items
Концепция может иметь значение только для конечного пользователя. Но позже администратор может захотеть узнать, какие пункты наиболее популярны.
Во-вторых, если вы хотите что-то исследовать через консоль, очень полезно, если вам не нужно посещать отдельные приложения, потому что у них нет моделей для каждой таблицы.
Функциональность в совместно используемых моделях, которая отличается для каждого приложения, определяет переменную среды rails, которую мы расширили, чтобы включить больше контекста. Например: if Rails.env == 'admin_production'
Каков наилучший способ перенести существующие миграции в предлагаемую схему общей миграции?
Опять же, миграции должны существовать только один раз, и общая база данных знает, какие из них уже были запущены, поэтому, если вы не переименуете миграции, вам просто нужно выбрать местоположение и переместить файлы.