У меня возникла серьёзная проблема с моим форумом на Discourse.
Недавно я обнаружил, что все сообщения, содержащие отслеживаемые слова, которые вызывают флаг, автоматически скрываются.
Эти сообщения должны быть вручную разблокированы администратором, чтобы снова стать видимыми.
После некоторого расследования я заметил, что значение score_to_hide_post на моём сайте в настоящее время равно 0.0.
На другом экземпляре Discourse, который я администрирую, это значение составляет около 8.3, что кажется нормальным.
Из-за этого значения 0.0 любой флаг — даже единственный от отслеживаемого слова — немедленно скрывает сообщение.
Я не вносил никаких изменений в настройки недавно. Почему score_to_hide_post стало равным 0.0?
Как я могу восстановить его до нормального порога (например, 8.3), чтобы сообщения не скрывались сразу?
Я обнаружил, что поскольку score_to_hide_post равен 0.0, даже один флаг от нового пользователя немедленно скроет пост, что делает ситуацию довольно серьёзной. Что мне делать?
Вы можете исправить это, изменив настройку сайта Чувствительность скрытия постов. Установите её на подходящий уровень, например Средний или Высокий — это автоматически вернёт внутреннее значение score_to_hide_post к здоровому порогу.
Обратите внимание: чем ниже чувствительность, тем меньше очков флага требуется для скрытия поста — именно поэтому посты скрывались сразу.
Спасибо за предложение! Я попробовал изменить настройку сайта «Чувствительность скрытия постов» в панели администратора, которая имеет четыре варианта: Отключено, Низкая, Средняя и Высокая. Однако я обнаружил, что работает только вариант «Отключено». Независимо от того, выберу ли я Низкую, Среднюю или Высокую чувствительность, значение score_to_hide_post остаётся равным 0. Вы знаете, почему это происходит?
У меня есть вопрос относительно score_to_hide_post.
Я понимаю, что score_to_hide_post динамически рассчитывается на основе элементов, требующих проверки, но возможно ли, чтобы в обычных условиях он рассчитывался как 0?
Если он отображается как 0, означает ли это проблему в системе?
Насколько мне известно, при стандартной работе с настройкой «Чувствительность к скрытию постов», установленной в значение «Низкая», «Средняя» или «Высокая», пороговое значение должно быть положительным числом. Если вы видите score_to_hide_post = 0, когда чувствительность НЕ отключена, это указывает на неправильную конфигурацию системы. Возможные причины включают:
Повреждённые или отсутствующие значения в PluginStore
Проблемы с вашими SiteSettings (например, неправильная конфигурация reviewable_default_visibility)
Настройка reviewable_default_visibility по-прежнему имеет значение по умолчанию — low. После возникновения проблемы я даже пытался пересобрать сайт, но это не решило проблему. Я хотел бы понять, как вообще возникла эта проблема, и можно ли её исправить.
Я внимательно изучил код и обнаружил, что score_to_hide_post определяется следующими тремя методами:
def self.sensitivity_score_value(sensitivity, scale)
return Float::MAX if sensitivity == 0
ratio = sensitivity / sensitivities[:low].to_f
high =
(PluginStore.get("reviewables", "priority_#{priorities[:high]}") || typical_sensitivity).to_f
# Мы хотим, чтобы это значение было труднодостижимым
((high.to_f * ratio) * scale).truncate(2)
end
def self.sensitivity_score(sensitivity, scale: 1.0)
# Если балл меньше порога видимости по умолчанию, поднимем его до этого уровня.
# В противном случае возникнет запутанная ситуация, когда пост может быть скрыт,
# и модераторы никогда его не увидят!
[sensitivity_score_value(sensitivity, scale), min_score_for_priority].max
end
def self.score_required_to_hide_post
sensitivity_score(SiteSetting.hide_post_sensitivity)
end
Таким образом, score_to_hide_post = ((high.to_f * ratio) * scale).truncate(2)
где:
high.to_f может неожиданно оказаться равным 0 (обычно это должно быть положительное значение),
ratio = sensitivity / sensitivities[:low].to_f,
sensitivity берётся из настройки (например, 3, 6 или 9),
sensitivities[:low] = 9,
scale = 1.0.
Это означает, что score_to_hide_postникогда не должен быть равен 0. Если же он становится равным 0, это явно указывает на ошибку.