Домен
Во-первых, вам необходимо убедиться, что вы используете свой собственный домен для поддоменов.
Стандартный xxx.herokuapp.com
Heroku не сможет обрабатывать другой субдомен сверх этого, поэтому вам в основном нужно использовать свой собственный домен с самого начала.
Для получения дополнительной информации рекомендуется обратиться к этой документации!
Мультиарендность
Хотя у меня нет опыта работы с schemas
PGSQL, у меня есть есть несколько, в целом, с поддержкой нескольких арендаторов.
Здесь есть несколько отличных ресурсов:
По сути, multi-tenancy
- это всего лишь способ области данных, чтобы это был только клиент, с которым вы видите / взаимодействуете. В смысле БД два способа добиться этого - либо использовать разные БД (как в случае с MYSQL), либо использовать схему (например, с PGSQL).
Хотя я не могу дать вам прямого решения вашей проблемы, я могу помочь вам с некоторыми идеями:
Модели
Один из способов добиться мультитенантности, особенно с подобными MYSQL, - это сделать это с помощью модели:
Как мне работать с двумя разные базы данных в рельсах с активными записями?
#lib/admin.rb
class Admin < ActiveRecord::Base
self.abstract_class = true
establish_connection "#{Rails.env}_admin"
end
#app/models/option.rb
Class Option < Admin
# do stuff
end
Это очень хорошо работает для нас, хотя у нас еще не работает для учетных записей с ограниченной областью действия. Мы думали установить @@class_variable
для Account
или что-то в этом роде, но пока не работали над этим.
Это очень хорошо работает для баз данных на базе MYSQL, но также означает, что вам придется создавать базы данных для каждой учетной записи, что не будет работать с PGSQL (насколько мне известно)
Схемы PGSQL
Я считаю, что это своего рода читерский способ сделать это, поскольку все данные по-прежнему хранятся в одной базе данных - в основном она просто ограничена различными типами данных.
Проблема здесь в том, что реальная мультиарендность должна быть там, где вы полностью разделяете данные пользователя, чтобы вы могли полностью исключить их из приложения, если бы они захотели. С точки зрения безопасности и доступа это наиболее гибкий и модульный способ.
Проблема для Heroku в том, что они могут использовать только одну базу данных (они предоставляют каждому доступ к своим экземплярам базы данных AWS), то есть они не могут позволить вам создавать 50+ бесплатных баз данных (это просто не будет работать очень хорошо).
Вы, конечно, можете использовать свой собственный стек для создания необходимых вам баз данных, но с точки зрения PGSQL это просто создание schemas
для ваших данных, а затем использование чего-то вроде - _ 8_, чтобы это произошло:
PostgreSQL работает несколько иначе, чем другие базы данных при создании нового клиента. Если вы используете PostgreSQL, Apartment по умолчанию настроит новую схему и перейдет в нее. Это обеспечивает лучшую производительность и позволяет Apartment работать в таких системах, как Heroku, что не позволяет создавать полностью новую базу данных.
person
Richard Peck
schedule
13.07.2014