Преобразование одного приложения-арендатора в мультитенантное с помощью Apartment gem - PullRequest
0 голосов
/ 03 февраля 2020

Я создал приложение для арендаторов, в котором все основные функции готовы к отправке. Но теперь я хочу сделать его мультитенантным, используя жемчужину квартиры . Все учебники, которые я нашел, показывают, как начать с нуля. Но я не нахожу указателей на то, как преобразовать существующий проект во встроенный мультитенант. Из моего исследования я обнаружил, что для всех моделей требуется идентификатор арендатора, добавленный в процессе миграции. Как мне легко добавить это ко всем существующим моделям? Достаточно ли установить драгоценный камень и запустить генератор? Я запускаю rails 5 приложение API с почти 30 моделями и использую graphql ruby в среде Ubuntu 18.04.

Есть идеи, как это сделать?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Спасибо @lacostenycoder за указание в правильном направлении. Вот что я сделал.

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

Длинный ответ , мой опыт:

  1. Я на всякий случай сделал резервную копию существующих данных из своей базы данных ,
  2. Установленный квартирный драгоценный камень
  3. Если вы используете какие-либо PostgreSQL расширения базы данных, как я (pgcrypto, uuid-sop), вы должны понимать, что расширения не загружаются автоматически в Вновь созданная схема. ( см. подробности ) выполните следующие действия:

    • Следуйте инструкциям github readme для создания shared_extensions схемы
    • Создайте своего первого арендатора. Если это работает, все хорошо. Но ...
    • Если это не сработает, я имею в виду, что при создании арендатора вы получаете ошибки типа ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR: function gen_random_uuid() does not exist
    • или ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR: function uuid_generate_v4() does not exist (подробнее здесь , здесь и здесь ), как это было в моем случае при создании моего первого арендатора, я обнаружил, что после включения расширений в схеме public их нельзя устанавливается в общей схеме shared_extensions в этом случае. Поэтому вы должны изменить их с схемы publi c на схему shared_extensions. получить более подробную информацию здесь

    • Если вы используете uuid-ossp ALTER EXTENSION "uuid-ossp" SET SCHEMA shared_extensions в вашем rails dbconsole

    • Если вы используете pgcrypto ALTER EXTENSION "pgcrypto" SET SCHEMA shared_extensions в вашем rails dbconsole

Жемчужина квартиры создаст все модели для вашего арендатора, как только вы его получите Правильно настройте и создайте своего первого арендатора.

Для получения дополнительной информации о некоторых из этих проблем github в квартире. Здесь и здесь . У меня ушел день, чтобы разобраться и собрать эту информацию. Надеюсь, это сэкономит ваше время и головную боль!

0 голосов
/ 03 февраля 2020

Кажется, нет никаких причин, почему вы не можете добавить это в существующее приложение Rails. Я сам этого не делал, и, похоже, нет никаких специальных c руководств по переносу существующего приложения. Следуйте инструкциям по настройке драгоценного камня, как показано в README , а также , см. Вики для дополнительных настроек и инструкций. По возможности используйте TDD и ожидайте внесения изменений в ваше приложение, чтобы все работало правильно. В зависимости от того, насколько сложным будет ваше существующее приложение, будет зависеть, насколько сложным будет этот ход.

Возможно, вы захотите использовать lvh.me:3000 вместо localhost:3000 в качестве root домена и порта в вашем браузере и возможно используйте rails s -b lvh.me при запуске вашего локального сервера.

Если вы хотите безопасно взломать эту ветку, я рекомендую вам сделать полную резервную копию вашей локальной базы данных разработки, прежде чем приступить к работе, чтобы вы могли вернуться к своей стабильной текущей версии в случае, если go ужасно неправильно. Если вы используете Postgres, например, есть pg_dump и pg_restore

Этот подход в сочетании с хорошим TDD должен привести вас туда, где вам нужно.

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