RSS轮询插件移除手动添加的标签

我正在使用 RSS Polling 插件导入 RSS Feed。我默认不添加任何标签。相反,计划是让用户手动添加标签。但插件会在下次拉取时删除这些标签。例如,请看

编辑:我曾以为这可能与设置 create post for category and tag changes 有关,但我已经更改了它,标签仍然被删除。例如:

编辑 2:好的,这更奇怪了。一个帖子说一些标签已被删除,但标签仍然存在……

正在运行 Discourse 3.3.0.beta3-dev ( c13f64d35b ) 和 RSS Polling 0.0.1 be7b56e

1 个赞

也许有关联?日志中有一个重复出现的错误:

Job exception: undefined method `name' for an instance of String 

/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 中的“Tags”字段为空,那么手动添加的标签将在下次轮询时被删除。
  • 如果该字段有标签,那么手动添加的标签似乎会保留。

经过进一步测试,我几乎可以肯定问题在于,当 /admin/plugins/rss_polling 上的 RSS 订阅源没有分配任何标签时,标签会被自动删除。

1 个赞

我可以重现此问题。 :raised_hand:

我的步骤:

  • https://meta.discourse.org/c/bug/1.rss 添加到 RSS 轮询
  • 设置用户和类别,但将标签留空(保存)
  • 等待主题被拉入
  • 选择几个并手动添加标签
  • 等待下一次轮询
  • 看到手动添加了标签的主题已被编辑以删除它们

预期: 带有手动添加标签的轮询主题不应被编辑以删除这些标签
实际: 轮询主题标签被覆盖

/logs 中没有错误)

6 个赞

奇怪。它一直报告这个错误。一周内累积了 1344 个实例。看起来足够通用。

1 个赞

是否有近期的修复路线图?

我想这还很早。只是想知道是否有任何消息。

这发生在 core 中的 TopicEmbed

4 个赞

我已更新此内容,以便在 tags 为 nil 或缺失时(如 repro 中所示),tags 不会被更新:

这修复了所列的 repro

2 个赞

您好,我认为现在出现了一个新问题。我刚刚将 Discourse 更新到 3.3.0.beta4-dev(7b8863fcd5),现在有一些导入的帖子在每次轮询时都会被更新,但看不到任何差异变化。这些帖子有以下共同点:

  • 它们都是通过 RSS 轮询导入的。
  • 导入时它们收到一个标签,即 RSS 轮询中设置的标签。
  • 我们手动添加了第二个标签。

这是一个示例差异。看不到任何更改:

对我们来说,这是一个回归。之前的 bug 可以通过为所有 RSS feed 添加一个默认标签来规避。然后可以手动添加标签而不会出现问题。现在,我们的“最新”列表被这些没有变化的重复更新所垃圾信息化。

更新:或者这可能更具体或本地化?因为并非所有手动添加了标签的主题都在被更新。我正在从一些已更新的帖子中删除并重新添加标签,以查看是否能找到某种模式。我会在此处回复任何发现。

2 个赞

好的,我可以确认这些重新出现的帖子的模式:

  • 它们都是通过 RSS 轮询导入的。
  • 导入时它们都获得了一个标签,即 RSS 轮询中设置的标签。
  • 我们手动添加了第二个标签。

我感到困惑是因为只有一些带有附加标签的帖子会继续刷新,而不是全部,但答案很简单:RSS Feed 仍在调用它们,而较旧的帖子或 RSS Feed 中只有最近条目的帖子在逻辑上不会被触发。

如果可能,实现应该很简单:

  1. 如果导入的帖子是新的,则导入 RSS 轮询设置中定义的标签(如果有)。
  2. 如果导入的帖子不是新的,则根本不检查标签。

这样,新导入的帖子就会带有预期的标签(如果没有定义标签,则不带任何标签),而现有的帖子不会因为手动编辑的标签而发生任何更改/刷新。

您能否在有经过测试的解决方案到位之前撤销此补丁?我们的“最新”主页被这些旧条目占据,我们很幸运才刚刚开始标记,并且只有少数条目是手动标记的。否则,我现在可以删除第二个标签……

拉取时仍然看到它删除了标签

您可以看到“meta-hmd”被删除了。此标签是手动添加的,下次拉取时它会删除该标签。
“UploadVR”标签是在 RSS Polling Plugin 中配置的。 :slightly_frowning_face:

正如 @RGJ 所链接的。嵌入导入发现标签已更改,并正在重新导入帖子,删除了添加的标签。

也许可以添加一个切换来忽略 discourse 主题标签的更改?

1 个赞

添加了在 RSS 轮询中禁用标签更新的选项。让我们知道这是否解决了您的用例。

5 个赞

太棒了,感谢您快速修复!\n\n想知道这个 PR 是否可以被评估\n\nUse pubDate as topic timestamp by communiteq · Pull Request #72 · discourse/discourse-rss-polling · GitHub

1 个赞

@Heliosurge 提到的补丁来自 https://meta.discourse.org/t/rss-polling-setting-to-use-pubdate-to-set-the-date-of-imported-topics/312137。对我来说,这与这里的主题非常相关,因为我们委托开发了该功能,并且我们的服务器上安装了该 RSS 轮询版本。我们有数千个具有正确日期的导入主题,我担心安装标准的 RSS 插件来测试 @featheredtoast 昨天发布的补丁可能会通过将数千个更改引入不正确的日期或类似问题来破坏现有内容。

就我而言,我们已经运行了打过补丁的版本数周,并且已经导入了数十个不同的 feed,没有出现任何故障。它的运行效果很好,符合预期。

2 个赞

我已切换回官方插件

任何不再轮询的主题应该都没问题。

在此补丁之前,正如您所报告的,旧的导入的、不再足够新的 feed 应该保持不变。

所以任何您手动添加了标签但未拉取的 feed 都没问题。

1 个赞

@Heliosurge 如果您能在此处测试修复程序,那就太好了。我们几乎每天都在添加新的信息源,对我们来说,保留 PubDate 至关重要,因为每次导入可能包含数十甚至数百个条目。相比之下,我们可以等待标签的解决方案。

如果您仍在添加全新的 feed,那么您知道,这些新 feed 将不会遵守 pubdate。

正如我所提到的,任何因过旧而不再抓取的旧 feed 都不会更改标签。

我不确定 RSS 主题必须有多旧才能不再排队。

此主题在 4 天后自动关闭。不再允许回复。