Первоначально я написал свое приложение Ruby on Rails для одного клиента. Теперь я изменяю его, чтобы его можно было использовать для разных клиентов. Моя конечная цель состоит в том, чтобы какой-то пользователь (не я) мог нажать кнопку и создать новый проект. Затем генерируются все необходимые изменения (новая схема, новые таблицы, обработка кода), и мне не нужно никому редактировать файл database.yml или добавлять новые определения схемы. В настоящее время я использую доступ SCOPED. Итак, у меня есть модель проекта, а другие связанные модели имеют столбец project_id.
Я посмотрел другие посты, касающиеся мультитенантных приложений в Rails. Многие люди, кажется, предлагают создавать разные схемы для каждого нового клиента в Postgres. Для меня, однако, не очень полезно для нового клиента иметь другую схему с точки зрения модели данных. У каждого клиента будут одинаковые таблицы, строки, столбцы и т. Д.
Мое видение для каждого клиента состоит в том, что в моей производственной базе данных сначала есть таблица различных проектов / клиентов. И каждая из этих таблиц связана с набором таблиц, которые практически совпадают с разными данными. Другими словами таблица таблиц. Или, другими словами, первая таблица будет сопоставлена с другим набором данных для каждого клиента, имеющего такую же структуру.
То, как я объяснил свое видение, похоже на то, как Postgres реализует разные «схемы»? Это похоже на вложенные таблицы? Или Postgres все равно должен запрашивать всю информацию в базе данных? В настоящее время я не использую Postgres, но я бы хотел узнать, подходит ли он для дизайна. Если вам известно о программном обеспечении для баз данных, которое работает с Rails и соответствует моим потребностям, сообщите мне.
Прямо сейчас я использую области для выполнения мультитенантных приложений, но он не чувствует себя масштабируемым или чистым. Тем не менее, нетехническому пользователю очень легко создать новый проект, если я предоставлю ему заполняемую информацию. Знаете ли вы, возможно ли с помощью определения нескольких схем Postgres, чтобы он работал автоматически после того, как пользователь нажимает кнопку? И я бы предпочел, чтобы это обрабатывалось Rails, а не внешним скриптом, если это возможно? (пожалуйста, сообщите в любом случае)
Самое главное, вы рекомендуете какие-либо плагины или я должен принять другую платформу для этой задачи? Я обнаружил, что Rails ограничен в некоторых случаях абстракции, как описано выше, и я впервые столкнулся с проблемой масштабирования Rails.
Любой совет, касающийся мультитенантных приложений или моей ситуации, приветствуется. Любые вопросы для уточнения или дополнительные советы приветствуются.
Спасибо,
--Dave