Плагин RSS Polling удаляет теги, добавленные вручную

Я импортирую RSS-каналы с помощью плагина RSS Polling. По умолчанию я не добавляю никаких тегов. Вместо этого планируется, что пользователи будут добавлять теги вручную. Однако плагин удаляет теги при следующем обновлении. Например:

РЕДАКТИРОВАНИЕ: Я думал, что это может быть связано с настройкой «Создавать пост при изменении категорий и тегов», но я изменил её, а теги всё равно удаляются. Например:

РЕДАКТИРОВАНИЕ 2: Хорошо, это ещё более странно. Пост утверждает, что некоторые теги были удалены, но теги всё ещё там…

Запущена версия Discourse 3.3.0.beta3-dev ( c13f64d35b ) и RSS Polling 0.0.1 be7b56e.

1 лайк

Возможно, это связано? В логах повторяется ошибка:

Исключение в задаче: у экземпляра класса String нет метода `name`

/var/www/discourse/app/models/topic_embed.rb:125:in `map`

/var/www/discourse/app/models/topic_embed.rb:125:in `import`

/var/www/discourse/plugins/discourse-rss-polling/app/jobs/jobs/discourse_rss_polling/poll_feed.rb:52:in `block in poll_feed`

/var/www/discourse/plugins/discourse-rss-polling/app/jobs/jobs/discourse_rss_polling/poll_feed.rb:41:in `each`

/var/www/discourse/plugins/discourse-rss-polling/app/jobs/jobs/discourse_rss_polling/poll_feed.rb:41:in `poll_feed`

/var/www/discourse/plugins/discourse-rss-polling/app/jobs/jobs/discourse_rss_polling/poll_feed.rb:20:in `execute`

/var/www/discourse/app/jobs/base.rb:305:in `block (2 levels) in perform`

rails_multisite-6.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection`
rails_multisite-6.0.0/lib/rails_multisite/connection_management.rb:21:in `with_connection`
/var/www/discourse/app/jobs/base.rb:292:in `block in perform`

/var/www/discourse/app/jobs/base.rb:288:in `each`

/var/www/discourse/app/jobs/base.rb:288:in `perform`

sidekiq-6.5.12/lib/sidekiq/processor.rb:202:in `execute_job`

sidekiq-6.5.12/lib/sidekiq/processor.rb:170:in `block (2 levels) in process`

sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:177:in `block in invoke`

/var/www/discourse/lib/sidekiq/pausable.rb:132:in `call`

sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:179:in `block in invoke`

sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:182:in `invoke`

sidekiq-6.5.12/lib/sidekiq/processor.rb:169:in `block in process`

sidekiq-6.5.12/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch`

sidekiq-6.5.12/lib/sidekiq/job_retry.rb:113:in `local`

sidekiq-6.5.12/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch`

sidekiq-6.5.12/lib/sidekiq.rb:44:in `block in <module:Sidekiq>`

sidekiq-6.5.12/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch`

sidekiq-6.5.12/lib/sidekiq/processor.rb:263:in `stats`

sidekiq-6.5.12/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch`

sidekiq-6.5.12/lib/sidekiq/job_logger.rb:13:in `call`

sidekiq-6.5.12/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch`

sidekiq-6.5.12/lib/sidekiq/job_retry.rb:80:in `global`

sidekiq-6.5.12/lib/sidekiq/processor.rb:124:in `block in dispatch`

sidekiq-6.5.12/lib/sidekiq/job_logger.rb:39:in `prepare`

sidekiq-6.5.12/lib/sidekiq/processor.rb:123:in `dispatch`

sidekiq-6.5.12/lib/sidekiq/processor.rb:168:in `process`

sidekiq-6.5.12/lib/sidekiq/processor.rb:78:in `process_one`

sidekiq-6.5.12/lib/sidekiq/processor.rb:68:in `run`

sidekiq-6.5.12/lib/sidekiq/component.rb:8:in `watchdog`

sidekiq-6.5.12/lib/sidekiq/component.rb:17:in `block in safe_thread`

И я думаю, что нашёл закономерность:

  • Если поле «Теги» в /admin/plugins/rss_polling пустое, то теги, добавленные вручную, удаляются при следующей проверке.
  • Если в этом поле есть хотя бы один тег, то вручную добавленные теги, похоже, сохраняются.

После дополнительных тестов я почти уверен, что проблема заключается в том, что теги автоматически удаляются, если RSS-лента на /admin/plugins/rss_polling не имеет назначенных тегов.

1 лайк

Я могу воспроизвести эту проблему. :raised_hand:

Мои шаги:

  • Добавьте https://meta.discourse.org/c/bug/1.rss в опрос RSS
  • Укажите пользователя и категорию, но оставьте теги пустыми (сохраните)
  • Дождитесь загрузки тем
  • Выберите несколько тем и вручную добавьте теги
  • Дождитесь следующего опроса
  • Увидьте, что у темы с вручную добавленными тегами они были удалены при редактировании

Ожидаемое поведение: Опрашиваемая тема с вручную добавленными тегами не должна редактироваться с целью удаления этих тегов
Фактическое поведение: Теги опрашиваемой темы перезаписываются

(Хотя в /logs ошибок нет)

6 лайков

Странно. Ошибка продолжает появляться. За неделю накопилось 1344 случая. Выглядит достаточно обобщённо.

1 лайк

Есть ли исправление в ближайшем плане разработки?

Думаю, ещё рано. Просто интересно, есть ли какие-то новости.

Это происходит в TopicEmbed в ядре

4 лайка

Я обновил это так, чтобы теги не обновлялись, если они равны nil или отсутствуют (как в случае воспроизведения ошибки):

Это исправляет воспроизведение, указанное выше.

3 лайка

Привет, кажется, возникла новая проблема. Я только что обновил Discourse до версии 3.3.0.beta4-dev ( 7b8863fcd5 ), и теперь некоторые импортированные сообщения постоянно обновляются при каждой проверке опроса, хотя видимых изменений в diff нет. Вот что у этих сообщений общего:

  • Все они были импортированы через RSS Polling.
  • При импорте они получили один тег, установленный в настройках RSS Polling.
  • Мы вручную добавили второй тег.

Вот пример diff. Изменений не видно:

Для нас это регрессия. Предыдущую ошибку можно было обойти, добавив тег по умолчанию ко всем RSS-лентам. Тогда теги можно было добавлять вручную без проблем. Теперь наш список «Последнее» засоряется этими повторяющимися обновлениями без изменений.

Обновлено: или, возможно, проблема более специфична или локальна? Ведь не все темы с вручную добавленными тегами обновляются. Я удаляю и снова добавляю теги в некоторых из обновляемых сообщений, чтобы найти закономерность. Я отвечу здесь, как только найду что-либо.

2 лайка

Хорошо, я могу подтвердить эту закономерность для тем, которые снова появляются:

  • Все они импортируются через опрос RSS.
  • При импорте они получали одну метку, установленную в настройках опроса RSS.
  • Мы вручную добавили вторую метку.

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

Если возможно, реализация должна быть максимально простой:

  1. Если импортируемая тема новая, импортируйте метки, определённые в настройках опроса RSS (если они есть).
  2. Если импортируемая тема не новая, вообще не проверяйте метки.

Таким образом, новые импортируемые темы будут поступать с ожидаемыми метками (или без них, если метки не определены), а существующие темы не будут подвергаться изменениям или обновлению из-за вручную отредактированных меток.

Не могли бы вы откатить этот патч до тех пор, пока не будет готово протестированное решение? Наша главная страница «Последнее» занята этими старыми записями, и нам повезло, что мы только начали использовать метки, и вручную помечено лишь несколько записей. В противном случае я могу пока удалить вторые метки…

Я всё ещё наблюдаю, что при обновлении теги удаляются

Вы можете видеть, что удаляется тег “meta-hmd”. Этот тег был добавлен вручную, но при следующем обновлении он удаляется.
Тег “UploadVR” настроен в плагине RSS Polling Plugin. :slightly_frowning_face:

Как указал @RGJ, импорт встраиваемого контента обнаруживает, что теги изменились, и повторно импортирует пост, удаляя добавленный тег.

Возможно, стоит добавить переключатель для игнорирования изменений тегов тем в Discourse?

1 лайк

Добавлена возможность отключить обновление тегов в RSS-опросах. Дайте знать, если это решило вашу задачу.

5 лайков

Отлично, спасибо за быстрое исправление!

Хотелось бы узнать, можно ли оценить этот PR:

1 лайк

Патч, упомянутый @Heliosurge, доступен по ссылке: RSS Polling setting to use pubDate to set the date of imported topics. Для меня это очень актуально в контексте данной темы, поскольку мы заказывали эту функцию, и на нашем сервере установлена версия RSS Polling с этим патчем. У нас уже импортированы тысячи тем с правильными датами, и я боюсь, что установка стандартного плагина RSS для тестирования вчерашнего патча от @featheredtoast может всё сломать, например, приведя к массовому изменению тысяч дат на неверные или к другим проблемам.

К слову, мы уже несколько недель работаем с этой модифицированной версией и импортировали десятки различных лент без единого сбоя. Всё работает отлично и так, как задумано.

2 лайка

Я вернулся к официальному плагину.

Темы, которые больше не опрашиваются, должны работать корректно.

До этого обновления, как вы и сообщали, старые импортированные каналы, которые больше не являются актуальными, останутся без изменений.

Таким образом, любые каналы, к которым вы вручную добавили теги и которые сейчас не обновляются, будут в порядке.

1 лайк

@Heliosurge, если вы сможете протестировать исправление здесь, это было бы отлично. Мы почти ежедневно добавляем новые источники, и для нас критически важно сохранять PubDate, так как каждый импорт может содержать десятки или даже сотни записей. В то же время мы можем подождать с решением по тегам.

Если вы всё ещё добавляете совершенно новые ленты, то, как вы знаете, для этих новых лент поле pubdate не будет учитываться.

Любые старые ленты, которые, как я уже упоминал, больше не обновляются из-за их возраста, не будут менять теги.

Я не уверен, насколько старой должна быть тема RSS, чтобы она больше не находилась в очереди.

Эта тема была автоматически закрыта через 4 дня. Новые ответы больше не принимаются.