2015-05-05 2 views
1

Я работаю над созданием нескольких сайтов всей части одной компании. Я использую nitrous.io для разработки. Я читал, что вы можете использовать одну БД в производстве. Нужно ли мне это делать и на стороне разработки? Не знаете, как это сделать.Рельсы одна БД с несколькими приложениями/доменами

Файловая структура на nitrious поле/домены, которые будут использоваться

  • счета/(user.site1.com & user.site2.com)
  • Администратор/(admin.site1.com)
  • магазин/(shop.site1.com & shop.site2.com)
  • site1/(site1.com)
  • site2/(site2.com)

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

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

Любые советы были бы весьма признательны.

Ian

ответ

2

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

  1. Сайт 1 обновляет таблицу одновременно с сайтом 2, и возникает конфликт относительно того, какие данные должны быть сохранены.
  2. Вы обновляете код на сайте 1, чтобы добавить новый столбец в таблицу. Вы делаете то же самое для сайта 2, но обновление сайта 2 происходит из-за того, что новый столбец уже добавлен (по сайту 1).
  3. Один сайт пытается прочитать запись сразу после того, как другой удалил ее, и есть конфликт.
  4. и т.д. (есть еще много случаев, я уверен, что вы можете думать)

Но не все потеряно !!!

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

Ваш API будет иметь несколько основных действий: один для создания новой записи, один для записи, один для обновления записи и один для удаления записи.

Вы можете начать с проверки документации по ресурсам Rails по адресу http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default - в ней описано, как вы можете автоматически генерировать базовый CRUD API. CRUD btw означает создание, чтение, обновление и удаление - основные функции, которые вы хотите сделать.

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

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

Вы можете сначала создать базовый API, а затем написать только один из своих сайтов. Получите его работу, затем добавьте еще один. Подумайте о Googling для «Rails restful API» для некоторых хороших ссылок и удачи!

+0

Это рецепт для * ужасающего * исполнения, хотя и много повторной реализации логической стороны приложения, которая должна быть выражена в виде запросов. Это быстрый путь к n + 1 территории SELECT. Конечно, есть место для такого подхода - но его редко следует строить на простом API стиля «CRUD». –

+0

Не во ВСЕХ рецепт плохой производительности. Вот для чего предназначены API-интерфейсы - позволяя нескольким приложениям обращаться к общей системе данных и бизнес-логике. –

+0

Я действительно смущен - вы говорите, что даже базовый CRUD API - это плохой подход? –

0

Пользователи Rails обычно используют несколько schemas в одной БД для этого, в случаях, когда «несколько приложений» - это действительно одно приложение с несколькими версиями - например. «customer2.mycompany.com», «customer3.mycompany.com» и т. д. Обычно это называется «многопользовательский» хостинг.

Вы можете запросить общие таблицы и таблицы, соответствующие конкретным пользователям/сайтам/продуктам, которые управляются с помощью search_path.


Примечание:

Этот подход также может работать там, где несколько приложений доступа к общим данным, но это только действительно хорошо работает, если все приложения разделяют один и тот же код для доступа к общим данным. Это может быть веб-API (по запросу Тима), библиотека, предоставляющая функции или объекты, или она может быть API уровня базы данных с представлениями и процедурами. (Для Rails только веб-API или библиотека будет работать хорошо, Rails имеет тенденцию плохо работать с интерфейсами на основе представления и процедуры).

Если у каждого приложения есть свой собственный код для доступа к общим данным, вы будете тратить время и силы, и вы также сделаете обслуживание в кошмар. Каждый раз, когда вам нужно каким-либо образом изменить структуру общих данных, вам нужно будет обновить все приложения.

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