Feedback on the new Review Queue (2019)

Предложение по системе рецензирования: при одобрении поста, который снимает запрет с пользователя, можно ли добавить заметку для пользователя о данном событии? Что-то вроде '@username снял запрет с этой учётной записи' было бы очень полезно. В настоящее время в заметках мы видим только половину истории.

3 лайка

Лучше просто удалить их полностью, так и делаю я. Обычно это ошибка, и мне не нравятся шумные заметки, которые не несут никакой пользы.

2 лайка

Из очереди модерации для типа «Ожидающий пост» при попытке удалить пользователя с большим количеством публикаций возникает ошибка 502 (тайм-аут).

Не уверен, каков верхний предел, но по результатам тестов сегодня минимальное количество постов, при котором удаление не сработало, составило 288.

Например, в ситуации, когда пост был помечен (тип: Ожидающий пост) из-за наличия слова в списке «Следим за словами» → «Требовать одобрения».

В настоящее время доступны следующие опции:
Одобрить пост | Отклонить пост | Удалить пользователя | Редактировать

Полагаю, что добавление опций «Заглушить» и «Приостановить» для таких типов ожидающих постов было бы весьма полезным. Например, «Отклонить пост» + «Заглушить» или «Приостановить». Это дало бы администраторам возможность выбора между заглушением/приостановкой пользователя или полным удалением его из истории прямо из очереди модерации.

Кроме того, если удаление пользователей с количеством постов выше определённого порога из очереди модерации невозможно из-за ошибок 502, наличие опций «Приостановить» и «Заглушить» в качестве альтернатив было бы очень кстати.

3 лайка

Ещё немного информации:

При открытии раздела «Сгруппировано по темам» из очереди модерации возникает ошибка:

Ошибка сервера
при попытке загрузить /review/topics
Код ошибки: 500 Internal Server Error

Обратите внимание, что в очереди модерации около 30 тысяч элементов; многие из старых элементов были добавлены Akismet до того, как я его удалил.

Проблема с прокруткой/пагинацией (возможно, стоило разместить это здесь): Review Queue Pagination/Infinite Scrolling after Taking an Action

Касательно элементов типа «(type: Queued Post)» и возникновения тайм-аута 502 при использовании опции «Удалить пользователя». Я могу подтвердить появление этой ошибки на аккаунте с 166 публикациями.

Идеи:

  1. Было бы полезно иметь прямую ссылку на страницу администратора пользователя из очереди модерации.

  2. На данный момент, кажется, невозможно отказаться от ежедневного напоминания по электронной почте «x элементов требуют проверки». Было бы удобно иметь возможность отключить такие уведомления.

2 лайка

Можете проверить ваши /logs и сообщить, в чём заключается ошибка?

3 лайка

Хорошо, я думаю, это оно:

ActiveRecord::SubclassNotFound (Механизм наследования по единой таблице не смог найти подкласс: ‘ReviewableAkismetPost’. Эта ошибка возникает, потому что колонка ‘type’ зарезервирована для хранения имени класса в случае наследования. Пожалуйста, переименуйте эту колонку, если вы не планировали использовать её для хранения класса наследования, или переопределите Reviewable.inheritance_column, чтобы использовать другую колонку для этой информации.)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/inheritance.rb:234:in `rescue in find_sti_class’

2 лайка

Можете подтвердить, что у вас установлена последняя версия плагина Akismet, и обновить его, если это не так?

4 лайка

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

4 лайка

Могу подтвердить, что Akismet в данный момент удалён. Я снял его с установки довольно давно.

1 лайк

О, это интересно, как подозревает @featheredtoast. @Roman, как ты думаешь, нам следует поступить в этом случае, если записи существуют, но плагин удалён?

4 лайка

Я думаю, что можно определить, какие типы reviewable нужно исключить, сделав что-то вроде этого:

class Reviewable < ActiveRecord::Base
  def self.exclude_types
     db_types = Reviewable.distinct.pluck(:type)

     @exclude_types ||= db_types - Reviewable.types
  end
  
...
end

Затем мы можем использовать эти типы для применения default scope. Вероятно, нам придётся добавить индекс по полю type в таблицу.

5 лайков

@Роман, сможешь взять это, когда будет время?

5 лайков

В очереди на модерацию появляется много невидимых изображений. Некоторые отображаются нормально, соотношение примерно 50/50. При проверке некоторые показывают что-то вроде этого, но ничего не отображается:

src="/images/transparent.png" alt="" data-orig-src="upload://fwf1zrfwefWEqGer2W3xz1ed.jpeg"

Проблема возникает как в случаях с использованием CDN + S3, так и при использовании локального хранилища.

1 лайк

Да, проблема затрагивает только публикации в очереди.

У меня есть PR с исправлением, ожидающий проверки, поэтому изображения должны скоро снова появиться.

Я сообщу вам после того, как мы его объединим.

4 лайка

Исправление теперь доступно в ветках tests-passed и stable.

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

8 лайков

Большое спасибо за исправление, @Roman!

Ещё один возможный баг в тесте tests-passed: Сценарий — принятие поста в очереди модерации, затем возврат и его отклонение. Пост останется в списке и будет виден на сайте.

Редакция: два нижних абзаца этого комментария также описывают ещё одну возможную проблему, связанную с опциями очереди модерации и общесайтовыми ограничениями частоты действий: Discourse No Bump - #27

1 лайк

Ещё один момент, который я заметил, касается настройки «автообработка по истечении времени ожидания». У меня в некоторых очередях на ревью много старых элементов, возраст которых значительно превышает значение настройки «автообработка по истечении времени ожидания» (используется значение по умолчанию), но они, похоже, не обрабатываются автоматически. Кажется, ни один из элементов не обрабатывается автоматически. Не уверен, что я что-то упускаю.

Кроме того, при сортировке очереди на ревью по полю «Дата создания (обратно)» возникает ошибка 500. Все остальные фильтры «сортировать по» работают нормально.

1 лайк

Не могли бы вы проверить логи и сообщить, в чём заключается ошибка при изменении порядка сортировки?

3 лайка

Спасибо @eviltrout, конечно. Вот ошибка, которую я вижу:

ActiveRecord::SubclassNotFound (Механизм наследования по одному столбцу не смог найти подкласс: ‘ReviewableAkismetPost’. Эта ошибка возникает, потому что столбец ‘type’ зарезервирован для хранения класса в случае наследования. Пожалуйста, переименуйте этот столбец, если вы не планировали использовать его для хранения класса наследования, или переопределите Reviewable.inheritance_column, чтобы использовать для этой информации другой столбец.)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/inheritance.rb:234:in `rescue in find_sti_class’

Обратите внимание, что плагин Akismet был удалён с этого конкретного форума довольно давно.

2 лайка

Ага, значит, это всё ещё связано с этим. @Roman, похоже, здесь может быть баг, связанный с наличием в базе данных старых типов проверяемых элементов?

4 лайка