Привет! У меня возникла проблема, которая началась несколько обновлений Discourse назад: я получаю уведомления о том, что новый пользователь ожидает одобрения, но при этом очередь проверки оказывается пустой.
Это происходит только тогда, когда один пользователь запрашивает одобрение. Если в очереди находятся несколько человек, я вижу всех, кроме одного — один всегда отсутствует.
Другими словами, многие люди не могут зарегистрироваться.
В отдельной теме было высказано предположение, что плагин многократного выбора (multi-select) каким-то образом участвует в этом и заставляет Discourse добавлять единицу к длине очереди.
В целом это кажется маловероятным, поскольку что-то должно происходить, чтобы уведомление появлялось в одни дни, но не в другие. Кроме того, проблема возникла не сразу после установки плагина — она появилась спустя несколько месяцев, и я могу связать это только с обновлением Discourse (поскольку, насколько я знаю, никаких других плагинов или изменений не вносилось).
Сталкивался ли кто-нибудь ещё с этим? И каково может быть решение?
На всякий случай, @jjaffeux, возможно ли, что исправление «FIX: makes value parsing more resilient», которое вы внесли в этот плагин, может быть связано с этой проблемой?
Привет — я тоже не до конца понимаю. Возможно, дело в обоих факторах?
Проблема возникла не сразу после установки плагина, а несколько обновлений ядра назад. Если плагин всё же имеет отношение к делу, возможно, происходит какое-то непреднамеренное взаимодействие?
Я не могу протестировать удаление плагина, чтобы проверить, сохранится ли проблема, так как он критически важен для работы: проверка регистраций пользователей зависит от ответов, которые они могут предоставить только при активном плагине (пользователям необходимо делать выбор из выпадающего списка).
Моя первая рекомендация здесь — подождать, пока состояние не станет «плохим»… затем включить безопасный режим в вашем браузере и проверить, выглядит ли очередь нормально.
Если в безопасном режиме всё выглядит хорошо, вам, вероятно, стоит написать в Marketplace, чтобы плагин был преобразован в компонент темы и обновлён в соответствии с последними паттернами Discourse.
К сожалению, результат тот же в безопасном режиме — в ответ на уведомление о ожидающих пользователях в очереди на проверку всё ещё отсутствует один, даже когда я захожу в безопасном режиме Discourse с отключёнными всеми тремя элементами настройки сайта.
Возможно, нам стоит попросить эксперта по очереди на ревью взглянуть на эту тему. Я помечу это сообщение, и кто-нибудь свяжется с вами в ближайшие несколько дней.
Очень помогли бы точные шаги для воспроизведения проблемы.
Спасибо, Сэм.
Очень сложно определить точные шаги — я не уверен, что сделал что-то необычное, и не могу связать начало проблемы с каким-либо конкретным событием.
По моему мнению, основными кандидатами являются либо обновление Discourse, либо обновление плагина многократного выбора от @j.jaffeux от 14 марта, направленное на «повышение устойчивости анализа значений».
Проблема в том, что новые регистрации происходят настолько нерегулярно, что могут пройти недели без единой, поэтому причинно-следственная связь может быть очень разнесена во времени.
Хорошо, это было интересно — я попытался использовать свой аккаунт Gmail, как указано выше, но даже когда я открыл страницу Gmail в другом окне браузера и ждал, пока придет письмо с подтверждением от Discourse, мне на мой обычный адрес администратора пришло уведомление о новой регистрации на проверку (при этом очередь была пуста, как и раньше). Я ошибся при вводе адреса, поэтому письмо на мой аккаунт Gmail так и не пришло, и я не смог подтвердить регистрацию.
Так что, если это не совпадение, возможно, уведомления администраторам приходят слишком рано? Хотя это не объясняет, почему КАЖДОЕ уведомление касается ровно одного отсутствующего человека в очереди — предположительно, не всегда будет так, что один заявитель не сможет подтвердить адрес электронной почты, а остальные смогут.
** Редактирование
Позже я исправил адрес Gmail в том же окне инкогнито, где проходила регистрация, и повторно отправил письмо с подтверждением — оно затем появилось в окне браузера Gmail. Я успешно подтвердил регистрацию, используя ссылку из письма, в другом окне инкогнито. Второе уведомление на адрес администратора не пришло, поэтому я могу только предположить, что первое уведомление действительно было связано с этой попыткой регистрации.
Открыв еще одно окно браузера, я снова зашел на сайт в безопасном режиме, вошел как администратор и увидел ту же очередь с одним человеком на проверку — но на этот мой новый тестовый аккаунт был виден и мог быть одобрен.
Помогает ли что-то из этого пролить свет на проблему?
Для продолжения — я попробовал ещё раз и создал новый фейковый аккаунт через окно инкогнито (с первого раза указав правильный адрес). Эта попытка прошла успешно, как и ожидалось. При ответе на уведомление администратору, отправленное по электронной почте, через обычное окно браузера я увидел, что новый пользователь появился в очереди.Затем я повторил процедуру: регистрация через обычное окно, а ответ на уведомление — также через обычное окно (без использования инкогнито или безопасного режима на каком-либо этапе). И снова всё работало как положено. Таким образом, проблема (или, возможно, две проблемы — уведомление администратору ещё до подтверждения адреса электронной почты заявителем и отсутствие неполной или завершённой заявки в очереди) ограничилась первой попыткой.Опять же, не уверен, добавляет ли это много ясности, но, возможно, после того как первая регистрация была сорвана системой (сгенерировавшей фантомное уведомление), последующие регистрации проходят нормально? Или система возвращается в режим сбоя после определённого периода без активности в регистрации?
Подозреваю, что проблема возникла из-за миграции, которую я добавил примерно в то же время, что и упомянутый вами коммит. Из-за этого некоторые неутверждённые пользователи отображаются в очереди на проверку, что вызывает странные уведомления.
Не могли бы вы выполнить этот запрос в обозревателе данных, чтобы подтвердить, что дело именно в этом?
SELECT COUNT(*)
FROM users
INNER JOIN reviewables r ON r.target_id = users.id
WHERE r.type = 'User' AND r.status = 1 AND users.approved = FALSE
Однако моя установка Discourse в данный момент также не показывает ожидающих пользователей. Я только что создал ещё один тестовый аккаунт, подтвердил адрес электронной почты, но уведомление на адрес администратора до сих пор не пришло. Зайдя снова на сайт как администратор, я повторно выполнил запрос, и счётчик снова показал ноль, но теперь Discourse корректно сообщает, что есть пользователь, ожидающий проверки
Обычно уведомления о пользователях, требующих проверки, приходят на адрес администратора практически мгновенно, поэтому я уверен, что это уведомление так и не было отправлено. Теперь проблема как раз наоборот!
*РЕДАКТИРОВАНИЕ — Я только что получил уведомление о том, что ДВА пользователя ожидают проверки (после нетипичной задержки). Тем не менее, маленький красный значок рядом с гамбургер-меню показывал цифру «1», а при переходе к очереди на проверку отображался только мой единственный тестовый аккаунт, созданный выше, — которого я одобрил, и Discourse сообщил, что больше нет пользователей для проверки.
После этого я снова выполнил запрос — и счётчик показал ноль.
Извините, я понял, что условие WHERE неверное. Там должно быть r.type = 'ReviewableUser', а не User.
Можете выполнить этот запрос?
SELECT COUNT(*)
FROM users
INNER JOIN reviewables r ON r.target_id = users.id
WHERE r.type = 'ReviewableUser' AND r.status = 1 AND users.approved = FALSE
Привет, Роман!
Я только что получил ещё одно фантомное сообщение. Затем, прочитав ваше последнее сообщение, я выполнил новый запрос — результат тот же: count=0.
Не мог бы ты проверить, есть ли на твоём сайте неутверждённые пользователи, у которых нет связанного объекта для проверки? Я пытаюсь воспроизвести эту ошибку, но пока безрезультатно.
Вот запрос для этого:
SELECT COUNT(*)
FROM users u
LEFT JOIN reviewables r ON r.target_id = u.id AND r.type = 'ReviewableUser'
WHERE approved = false AND r.id IS NULL
Также попробуй:
SELECT COUNT(*) FROM users WHERE approved = false AND active = true
Не уверен, что это имеет отношение к делу, но есть много постов, импортированных из закрытой группы Yahoo, которая была предшественницей текущего форума — они были объединены ради непрерывности и возможности поиска. Создатели тех старых постов (датируемых началом 2000-х) часто не имеют аккаунтов на текущем форуме.
Это было очень интересно — как у человека может быть неутверждённый аккаунт, но при этом он активен? Разве это не я как администратор? Как мне изменить запрос, чтобы определить этого пользователя?
Это просто означает, что учётная запись находится в ожидании утверждения.
SELECT * FROM users WHERE approved = false AND active = true
Имя пользователя будет ссылкой на профиль пользователя. После того как вы его найдёте, можете поделиться датой created_at? Мне бы хотелось узнать, меняли ли мы что-то вокруг этой даты.