При попытке предоставить права администратора пользователю (любым пользователем, на самом деле) я получаю только следующее сообщение об ошибке (после нажатия на ссылку подтверждения):
ActiveRecord::RecordInvalid (Validation failed: Name has already been taken) app/models/group.rb:607:in 'refresh_automatic_group!' app/models/group.rb:666:in 'block in refresh_automatic_groups!' app/m
Failed to handle exception in exception app middleware : ActiveRecord::RecordInvalid : Validation failed: Name has already been taken
Примерно в то же время я также получаю сообщение о том, что MaxMind работает неправильно. Не уверен, связано ли это с этим (не нашёл никаких связанных настроек в интерфейсе администратора):
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb) could not be found: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb
Нет, кнопка «Предоставить права администратора» работает.
Весь процесс выглядит так:
Я нажимаю кнопку «Предоставить права администратора», и приложение показывает мне модальное окно: «Мы отправили вам электронное письмо для подтверждения нового администратора. Пожалуйста, откройте его и следуйте инструкциям».
Я нажимаю ссылку подтверждения в письме («Подтвердить учётную запись администратора»), которая перенаправляет меня на страницу подтверждения.
На странице подтверждения я нажимаю кнопку «Предоставить права доступа администратора», после чего появляется страница ошибки (см. скриншот в моём первоначальном сообщении), а также сообщения об ошибке в логе.
Также я только что заметил следующее сообщение выше в логе (с префиксом числа 46 — означает ли это, что оно повторялось 46 раз?):
Ошибка обеспечения согласованности для группы: Ошибка валидации: Имя уже занято
Discourse очень придирчив к этим идентификаторам: staff должно быть равно 2, admins — 1. Если каким-то образом у вас есть другая группа с таким именем, это может вызвать проблемы. Также убедитесь, что ни у одного пользователя нет имени admins.
Я заметил, что нет группы staff, есть только Staff. Если staff всегда имела id 3, то, вероятно, это означает, что кто-то удалил её и создал новую группу (id 42).
Достаточно ли просто создать staff заново или как мне решить эту проблему?
Да, это помогло! Группа существовала, но кто-то переименовал её. Поскольку это фактически нарушает базовую функциональность, я задаюсь вопросом, не следует ли запретить переименование системных групп через интерфейс.
Для истории, на случай если кто-то окажется в подобной ситуации:
docker exec -it app /bin/bash
su - postgres
psql -d discourse
discourse=# update groups set name='staff' where id=3;
\q