Я только что изменил имя пользователя xxx по его просьбе. Он хотел получить неактивное имя пользователя yyy. Сначала я изменил неактивное имя yyy на что-то другое, например yyy1, а затем изменил имя этого пользователя с xxx на yyy.
На этом этапе, во-первых, пользователь не мог ничего публиковать, и я увидел следующую ошибку в логах:
Job exception: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_users_on_username_lower" DETAIL: Key (username_lower)=(mina) уже существует.
Я попытался вернуть имя пользователя обратно, как было раньше, но теперь вся его история исчезла. Что именно пошло не так?
Кстати, не понимаю, почему возникает ошибка для этого пользователя (username_lower)=(mina). Я никогда не вносил в него изменений, и, похоже, это неактивный пользователь. Однако я заметил странное поведение на его профиле. Если я открою страницу уведомлений, то получу ошибку 404.
Хорошо, я выполнил все шаги. Если я сделал что-то не так, как вы, дайте знать.
У нас есть два пользователя:
xxx (активный аккаунт)
yyy (неактивный аккаунт)
Измените yyy на yyy1
Измените xxx на yyy
( у меня сработало)
Попробуйте создать пост с нового аккаунта yyy
( у меня сработало)
Верните yyy обратно в xxx
( у меня сработало, история пользователя не потерялась)
У меня не возникло никаких проблем в ходе всего процесса. Одно замечание: после смены имени пользователя через страницу администрирования пользователей необходимо обновить страницу, чтобы кнопка «Показать публичный профиль» начала вести на правильную страницу пользователя.
Можете ли вы проверить /admin/logs/staff_action_logs, чтобы убедиться, что все зафиксированные изменения имён пользователей логичны? Нажатие на аватары перечисленных пользователей должно перенаправлять вас на их текущие и правильные страницы.
Да, при нажатии на аватар я попадаю на их страницу. Однако, мне кажется, что их страница как-то неактивна. Например, я не могу отобразить их электронную почту или impersonate их аккаунт:
Согласно тому, что я вижу в этом отчёте, сначала я изменил fatemeh на fatemeh12. Затем изменил fatemeh_baghdadi на fatemeh. Спустя некоторое время пользователь сообщил мне, что не может ничего опубликовать. Я подумал, что, возможно, в процессе смены имени пользователя что-то пошло не так, и попытался изменить имя на то, которое ещё не использовалось. Поэтому я изменил fatemeh (ранее fatemeh_baghdadi) на fatemeh74. После этого я заметил, что вся история пользователя была полностью очищена, и я начал нервничать. Тогда я попытался вернуть имя пользователя к исходному: сначала с fatemeh74 на fatemeh_baghdadi, а затем с fatemeh_baghdadi на fatemeh_baghdadi5, но ничего не улучшилось. Сейчас у меня есть два разных пользователя — fatemeh74 и fatemeh_baghdadi5, которые теоретически должны принадлежать одному человеку, но фактически это два разных человека, и один из них, похоже, работает некорректно.
Я изо всех сил стараюсь разобраться в ситуации. Звучит это довольно странно!
Можете уточнить, что вы имеете в виду под фразой «их история была полностью очищена»? Должны ли в разделе активности профиля пользователя fatemeh_baghdadi5 отображаться различные темы и ответы?
Если это так, то теперь эти посты связаны с аккаунтом fatemeh74? Они должны где-то существовать на сайте и быть привязаны к конкретному пользователю. С точки зрения анонимного пользователя я не могу найти на вашем сайте пользователя с именем fatemeh74.
Есть фоновая задача EnsureDbConsistency, которая запускается каждые 12 часов. Возможно, стоит либо запустить её вручную через Sidekiq, либо подождать и посмотреть, не исправится ли всё автоматически в течение следующих 12 часов.
Если у вас действительно окажется два аккаунта, которые должны быть одним, вы сможете объединить их. Однако я настоятельно рекомендую сделать резервную копию перед попыткой этого сделать.
Без прямого доступа ко всей системе очень сложно понять, что именно происходит, но надеюсь, нам удастся во всём разобраться!
В тот момент, когда я изменил имя пользователя, я зашел на их профиль и не увидел никаких сообщений и т. д., но через некоторое время всё исправилось. Однако теперь fatemeh74, который, по-видимому, принадлежит правильному человеку, оказался неактивным. Как вы видите, мы не можем открыть их профильную страницу, хотя их сообщения и другая информация присутствуют. Вот пример:
На самом деле это не один аккаунт. Я проверил их электронную почту и ID — они совершенно разные. Однако согласно шагам, которые я выполнил для смены имён пользователей, они должны были стать одинаковыми, и у меня вообще не должно быть двух пользователей здесь.
@tshenry Нормально ли то, что у меня могут быть два имени пользователя, которые абсолютно одинаковы, за исключением первого слова, которое написано в верхнем/нижнем регистре?
Вы видите, что при поиске по fatemeh12 возвращаются, похоже, два разных имени пользователя. Так быть не должно (мне не удалось воспроизвести это). Похоже, оба ведут на один и тот же профиль.
Я в тупике и не знаю, как двигаться дальше. Если к этому времени завтра никто не откликнется, я попробую найти кого-то с новыми идеями. Если вы найдете какую-либо дополнительную информацию, которая, по вашему мнению, имеет отношение к делу, пожалуйста, опубликуйте её.
Что я понял на данный момент: на самом первом шаге я попытался изменить fatemeh на fatemeh12, чтобы освободить это имя пользователя. Однако имя пользователя Fatemeh12 уже существовало, поэтому на самом деле мне не следовало разрешать изменение fatemeh на fatemeh12. Тем не менее, система каким-то странным образом позволила мне это сделать, и с этого момента база данных дала сбой.
@tshenry, вы что-нибудь нашли? Сейчас пользователь fatemeh74, который был удалён, каким-то образом восстановился. Хотя точно не знаю, как именно. Хочу убедиться, что такое больше не повторится, поэтому мне нужно понять, почему у нас есть одинаковые имена пользователей с различиями в регистре букв и почему Discourse не предотвращает это. Мой Discourse уже обновлён.
Привет Это отличная новость. Я надеялся, что фоновая задача со временем решит проблему. Похоже, именно это и произошло.
У меня пока не было возможности подробнее разобраться в этом вопросе. Мы действительно ограничены в том, чем можем помочь, так как у нас нет доступа к базе данных вашего сайта. Мы могли бы углубиться в проблему таким образом только для наших клиентов на хостинге.
Это первый случай, о котором нам стало известно, и мне не удалось воспроизвести эту проблему. Я подозреваю, что это крайний случай, специфичный для вашего экземпляра. Мы, безусловно, будем следить за появлением подобных ситуаций в будущем. Если вы хотите проявить особую осторожность, я бы просто рекомендовал дважды проверить, что никто не имеет такого же имени пользователя, прежде чем менять имя пользователя.
Мы также сталкиваемся с этой же проблемой уже долгое время. Конечно, невозможно воспроизвести, как база данных пришла в такое состояние, но время от времени мы сталкиваемся с тем, что пользователи либо переименовывают сами себя в дублирующиеся имена в течение периода grace для переименования, но это также касается и переименований администраторами.
Мы не используем имена пользователей в кодировке Unicode, и это иногда довольно проблематично, так как это нарушает работу задачи синхронизации плагина Patreon, на которую мы сильно полагаемся для внешних служб политик.