Как создать нового пользователя в чистом SQL

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

Я только что вставил одну строку в таблицу user_emails:

insert into user_emails (user_id, email, "primary", created_at, updated_at) values (2,'user@email.com',true, now(), now());

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

Теперь я ожидаю, что кто-то скажет, что это неправильный способ действий, и я это понимаю. Но для меня это может быть необходимо, как я объясню ниже (некоторые мои предположения могут быть неверными, но это моё понимание):

  • Все скрипты импорта, которые переносят данные из другого форумного движка, ожидают возможность подключения к этому форуму из экземпляра Discourse. Однако получить доступ к старому форуму (jforum) из работающего экземпляра Discourse будет сложно, если не невозможно. Аналогично, развернуть среду разработки Discourse, где мог бы находиться старый форум (очень старый сервер), также невозможно.
  • Я не понимаю Ruby on Rails, поэтому не могу изменить существующие скрипты, но я понимаю SQL.
  • Я мог бы использовать API (у меня всего 5000 пользователей), но я хочу иметь возможность использовать плагин или метод, который сохраняет md5-хэш пароля, чтобы не заставлять всех пользователей сбрасывать пароли. Поэтому я не думаю, что это можно сделать через API.
  • Существует скрипт импорта для jforum, поэтому я могу использовать его, чтобы посмотреть, какие SQL-запросы нужны для извлечения данных из jforum, а затем поместить их в CSV-файлы для загрузки в базу данных.
  • Скрипты массового импорта, возможно, предоставляют способ добавления SQL в Discourse, но мне трудно найти соответствующие SQL-запросы.
  • Похоже, что главное — это добавить пользователей, а затем добавление категорий, тем и сообщений не должно быть слишком сложным.

Верно!

Если бы вы понимали, то не задавали бы этот вопрос. :wink:

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

Сделайте дамп базы данных и восстановите его на вашем локальном сервере Discourse (или где угодно, где есть подключение — я делал более крупные импорты с удалённой базой данных через домашнее интернет-соединение), а затем запустите существующий скрипт.

Гораздо проще использовать Ruby, который вы не понимаете, чем разобраться в нём настолько, чтобы понять, как написать SQL-запрос. Я изучил Ruby задолго после того, как написал свой первый импортер.

Это немного снисходительно!
Если скрипт массовой импорта выполняет SQL-запросы (как я предполагаю), то документирование SQL-команд для создания пользователя не представляет большей опасности, чем использование самого скрипта массовой импорта. И поскольку у меня сейчас чистая установка Discourse, это не будет иметь большого значения, даже если что-то пойдёт не так. Я предполагаю, что у меня в разработке больше лет, чем у вас.

Однако у меня нет большого опыта в администрировании, и моя первая попытка установить локальный сервер Discourse открыла ящик Пандоры. Если я не смогу подключиться к моему серверу MySQL JForum с сервера Discourse, мне придётся установить MySQL и перенести базу данных. Существующий скрипт JForum не включён в основную ветку исходного кода, и я использую очень старую версию JForum, так что не ожидаю, что он заработает.

Я не хотел никого обидеть. Наверное, вы не заметили смайлик :wink:?

Скорее всего, вы правы!

Иногда бесплатные советы от человека, который более трёх лет работает с Discourse на полную ставку, провёл десятки импортов и написал с нуля несколько импортеров, стоят того, за что вы платите.

Как насчет настройки SSH-туннеля?

Возможно, несогласованная. Поврежденной — нет.

Но вы можете создать пользователей через API, а затем вставить MD5-хэши в пользовательское поле с помощью SQL. Так вы получите лучшее из обоих миров.

О! Это отличная идея.

Это именно та бесплатная консультация, которую вы искали!

Да, я об этом думал, но так как я не до конца понимаю, как работает хеширование MD5, не было ясно, возможно ли это. Хорошо, я попробую.

Всё, что вам нужно сделать, — это добавить пользовательское поле:

  • user_id: очевидно
  • name: «import_pass»
  • value: md5-хеш

И установить плагин migratepassword.

Спасибо, у меня есть несколько вопросов, надеюсь, вы сможете мне помочь.

Установка

Выполните команду bundle exec rake plugin:install repo=http://github.com/[Communiteq](https://www.communiteq.com) (ранее DiscourseHosting)/discourse-migratepassword в директории вашего Discourse
Перезапустите Discourse
  1. Я установил плагин, но как перезапустить Discourse?

  2. Как добавить пользовательское поле? Можете ли вы предоставить SQL-запрос, или это можно сделать через API с помощью части `“user_fields[1]”: “string”"? Сейчас я программно создаю пользователей через API, но пока игнорирую это поле.

  3. Если плагин установлен, имеет ли значение значение пароля, передаваемое при вызове API создания пользователя?

  1. Нет, оно будет иметь приоритет над md5-хешем в пользовательском поле.

Ответы на два других вопроса можно легко найти на этом форуме. Если вы хотите сэкономить время, мы можем выполнить импорт и/или хостинг для вас как платную услугу.

Я искал оба ответа, но не смог найти. В первом случае запутанно, что некоторые установки выполняются через редактирование YAML-файла и последующий перезапуск Docker, а некоторые, как в данном случае, выполняются внутри контейнера Docker. Неясно, что означает «перезапуск» в этом контексте.

На этом форуме я не могу найти чистый SQL.

Удивительно, что здесь так активно продаются платные услуги для использования этого открытого ПО. На Stack Overflow такого не было, когда я задавал вопросы.

Мне нравится мыслить вместе с другими, внедрять инновации и вносить свой вклад. Но мне также нужно зарабатывать на жизнь, а это значит, что я должен где-то провести черту. Я стараюсь провести её там, где чувствую, что выполняю рутинную работу вместо того, чтобы мыслить, внедрять инновации и вносить свой вклад.

Поиск SQL-запроса для пользовательского поля — это для меня работа, и, поскольку вы опытный разработчик, я уверен, что вы тоже сможете разобраться :smiley:

Конечно, я могу попробовать разобраться сам, но вреда от вопроса нет, раз уж это

легко найти на этом форуме.

Что касается другого вопроса, то он остаётся для меня неясным.

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

Хорошо, вопрос 2: пример добавления пользовательского поля import_pass для user_id 5 (user_id можно увидеть в таблице user_emails или id из таблицы users)

insert into user_custom_fields (user_id, name, value, created_at, updated_at) values (5,‘import_pass’,‘2aee1c40222c7754d4534e61452612cc’, now(), now());

Хорошо, я нашёл.
./launcher restart app
но, похоже, перезапуск не происходит. Я могу войти в приложение и подключиться к базе данных, но не могу подключиться к веб-сайту. Возможно, стоит просто пересобрать и начать заново.

Итак, я запустил ./launcher rebuild app, и теперь всё вернулось в рабочее состояние.

Я думал, что это пересоздаст базу данных, но этого не произошло. Похоже, это потому, что сама база данных хранится вне Docker, а команда rebuild просто пересоздаёт приложение в Docker. Также я вижу, что плагин dataexplorer, который я добавил (изменив yaml-файл), всё ещё на месте. Но есть ли там плагин passwordmigration или он удаляется при rebuild? В разделе плагинов на странице администратора точно ничего нет.

Хорошо, я попробовал установить passwordmigration, затем снова запустил restart, и мой сайт снова упал. Похоже, что passwordmigration что-то ломает?

Поэтому я снова сделал rebuild, и всё заработало (но теперь плагин passwordmigration отсутствует). Если я запускаю ./launcher restart app без предварительной установки passwordmigration, то перезапуск проходит нормально. Значит, проблема именно в passwordmigration в моей настройке.

В прошлый раз, когда я пробовал, плагин passwordmigration был несовместим с выполнением импорта, поэтому вам стоит установить его после завершения импорта.

Возможно, он вызывает сбой вашей пересборки, но это было бы довольно удивительно, так как Ричард использует его в своем хостинге. Рекомендую установить его в app.yml так же, как вы установили data explorer, после того как выполните импорт.

Выполните rm -rf для директорий postgres в /var/discourse/shared/standalone, если хотите получить новую базу данных. Возможно, стоит ознакомиться с https://meta.discourse.org/t/advanced-troubleshooting-with-docker/15927

Отключение его во время импорта должно быть достаточно.

Странно: я сбросил базу данных и запустил ./discourse-setup, поэтому у меня была совершенно новая установка — всё работало отлично. Установил плагин migrationpassword через rake и перезапустил, но сайт снова упал с ошибкой 502! Плагин DataExplorer всё ещё был установлен, поэтому я удалил его, пересобрал систему — всё ок, затем снова установил migrationpassword, и опять ошибка 502.

Очень запутанная ситуация, потому что у других всё работает, а у меня на чистой установке — нет.

Попробую установить, отредактировав файл app.yml.

(Рождественские покупки помешали), но я наконец-то попробовал установить migratepassword, отредактировав app.yml и пересобрав… и это сработало!
Но опция bundle exec rake plugin:install repo=http://github.com/[Communiteq](https://www.communiteq.com) (ранее DiscourseHosting)/discourse-migratepassword не работает на моей стандартной установке. Возможно, это нужно проверить/удалить в README.md по адресу GitHub - communiteq/discourse-migratepassword: Support migrated password hashes · GitHub