Я собираюсь начать это предприятие (реализуя мультитенантность для небольшого рельсового приложения), и во время исследования я наткнулся на этот пост SO.
Удивительно, что никто не упомянул о великолепной заставке RyanB по внедрению MT с использованием схем PostgreSQL, поддерживаемых Heroku.
Вот ссылка на скринкаст http://railscasts.com/episodes/389-multitenancy-with-postgresql.
Концепция:
В приложении rails мы можем установить путь поиска для pg-соединения
connection.schema_search_path = "schema1, schema2, ..."
любые последующие действия будут выполнены над схемой1, если она найдет там соответствующую таблицу. В противном случае он ищет таблицу в schema2 и так далее. Пребывание со всей схемой приложения, включая арендатора, будет общедоступным, и обычная практика - сделать все таблицы, кроме арендатора, пустыми в общедоступной схеме.
Регистрация нового арендатора:
Добавьте функцию after_create в модель Tenant, чтобы создать новую схему для нового арендатора и создать все (загрузить schema.rb) таблицы приложений (кроме Tenant) в эту новую схему.
Пользователь:
когда пользователь посещает subdomain1.myapp.com, находит схему для этого субдомена из таблицы арендаторов и задает путь поиска соединения 'schema1, public' и аутентифицирует пользователя.
Обратите внимание, мое намерение состоит в том, чтобы просто охватить концепцию, лежащую в основе решения. Обратитесь к скринкасту RyanB для актуального решения.