Можно ли безопасно вставлять пользователей напрямую в отдельные базы данных Discourse?

Всем привет,

Мы запускаем несколько форков Discourse как изолированные экземпляры на одной виртуальной машине. У каждого форума своя отдельная база данных Postgres, но все они управляются общим скриптом, работающим на хост-машине.

Мы хотим автоматизировать создание начальных пользователей при настройке. Вместо использования API или импорта через CSV мы спрашиваем:

:light_bulb: Возможно ли (и безопасно) вставлять записи пользователей напрямую в базу данных каждого экземпляра?

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

Кто-нибудь уже пробовал создавать пользователей напрямую через БД? Или это плохая идея из-за рисков нарушения целостности данных, сессий или других специфичных для Discourse механизмов?

Будем благодарны за любые советы или опыт, которыми вы можете поделиться!

Безопаснее, если это сделает Rails, чем если вы будете изменять базу данных самостоятельно, но вы можете сделать это, если хотите. Обратите внимание, что вам нужно затронуть как минимум таблицы users и user_emails и убедиться, что user_ids совпадают.

Посмотрите на discourse/db/fixtures/009_users.rb at main · discourse/discourse · GitHub, а затем создайте плагин, который аналогичным образом добавляет фикстуру (например, ./discourse-salesforce/db/fixtures/001_groups.rb).

Также в качестве примера можно использовать скрипт импорта.

Спасибо, @pfaffman — очень ценим ваши рекомендации!

Просто для уточнения: одна из главных причин, по которой мы рассматриваем этот вариант, заключается в том, что методы на основе CSV и API слишком медленные для наших задач. Мы разворачиваем множество изолированных экземпляров и нам нужно быстро наполнить каждый из них группой пользователей в процессе подготовки.

Позволил бы упомянутый вами подход с фикстурами/плагинами значительно ускорить создание пользователей по сравнению с методами API или CSV? В частности, мы надеемся сократить время ожидания при настройке — в идеале решение, которое выполняется мгновенно или почти мгновенно вместе с первоначальной настройкой базы данных.

Ещё раз спасибо!

Вы можете посмотреть скрипты массового импорта в качестве примеров прямого обновления базы данных. Скрипт импорта имеет некоторые накладные расходы, поэтому, возможно, пример из фикстур будет работать быстрее?

Сколько пользователей вы добавляете? У вас одни и те же пользователи для каждого сайта?