Как я могу иметь несколько схем и несколько поддоменов при размещении на Heroku?

Я планирую использовать Devise и Apartment в моем следующем приложении для создания поддоменов для каждой организации, которая создает учетную запись. Я хотел бы разместить свое приложение на Heroku, но наткнулся на следующую цитату:

Наиболее распространенный вариант использования нескольких схем в базе данных - это создание приложения «программное обеспечение как услуга», в котором каждый заказчик имеет свою собственную схему. Хотя этот метод кажется убедительным, мы настоятельно не рекомендуем его использовать, поскольку он вызывал множество проблем в работе. Например, даже небольшое количество схем (> 50) может серьезно повлиять на производительность инструмента создания моментальных снимков базы данных Heroku, PG Backups.

Какой метод будет хорошо работать с Heroku для размещения поддоменов в стиле basecamp в rails 4, где многие пользователи могут войти в поддомен, частью которого они являются?

Если Heroku не работает, какие еще варианты PaaS подходят для этого?


person David Mckee    schedule 12.07.2014    source источник
comment
stackoverflow .com / questions / 11111617 /   -  person Brad Werth    schedule 27.07.2014


Ответы (1)


Домен

Во-первых, вам необходимо убедиться, что вы используете свой собственный домен для поддоменов.

Стандартный 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
comment
Спасибо, Рич! Ценю тщательность. Будет ли создание более 50 схем огромной проблемой? Вы знаете, есть ли альтернативы PG Backups? - person David Mckee; 14.07.2014
comment
Не уверен, что честно. Я не так часто использовал PGSQL на Heroku - только баловался с ним. У Heroku действительно есть поддержка премиум-класса, если вам жизненно необходимо получить правильный ответ: heroku.com/critical - person Richard Peck; 14.07.2014
comment
что было бы хорошей альтернативой Heroku в этой ситуации? - person David Mckee; 15.07.2014
comment
Рич, не могли бы вы помочь мне в достижении мультитенантности? Я очень близок к этому, например, когда я вручную ввожу URL-адрес и создаю запись, она создает запись в этом конкретном арендаторе. Но могу ли я добиться этого динамически? - person Mohd Anas; 18.09.2014
comment
Вы используете PGSQL или MYSQL? - person Richard Peck; 18.09.2014