类别错误:可见性受限及/或子类别

我也是,我今天也升级了。所以是在 Discourse 里?

现在我再深入研究一下。

1 个赞

嗯,你的问题是服务器端错误 @Jagster 我认为那是不同的问题。另外,这个更改尚未合并,因此不应影响自托管网站。

确实如此,但我已登录。OP 的错误是针对匿名用户的。而且,在这两种情况下,它都发生在类别上。

来自 Discourse:

HasCustomFields::NotPreloadedError (尝试访问“Category”类上未预加载的自定义字段“sort_topics_by_event_start_date”。

Message

HasCustomFields::NotPreloadedError (尝试访问“Category”类上未预加载的自定义字段“sort_topics_by_event_start_date”。为防止 N+1 查询,这是不允许的。)
app/models/concerns/has_custom_fields.rb:203:in `[]'
(eval):47:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
app/controllers/application_controller.rb:531:in `serialize_data'
app/controllers/application_controller.rb:540:in `render_serialized'
app/controllers/categories_controller.rb:408:in `categories_and_topics'
app/controllers/categories_controller.rb:99:in `categories_and_latest'
app/controllers/application_controller.rb:422:in `block in with_resolved_locale'
app/controllers/application_controller.rb:422:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
lib/middleware/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:389:in `call'
lib/middleware/gtm_script_nonce_injector.rb:10:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:233:in `call'

Backtrace

app/models/concerns/has_custom_fields.rb:203:in `[]'
plugins/discourse-calendar/plugin.rb:88:in `block (2 levels) in activate!'
(eval):47:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:456:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:124:in `block in serialize'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:123:in `map'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:123:in `serialize'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'

所以……接下来我应该禁用日历插件,对吗?

编辑

侧边栏上的分类链接可以正常工作,其他所有分类链接都会导致错误。

我已将此错误缩小范围。仅当类别包含子类别时才会发生。/categories 也会导致 500 错误。

而且我仍然不确定这是否来自 Calender。如果是,这是安全模式无效的另一个案例吗?

但 Lockdown 会给出这个:

消息

HasCustomFields::NotPreloadedError (尝试访问“Category”类上未预加载的自定义字段“redirect_url”。为防止 N+1 查询,此操作被禁止。)
app/models/concerns/has_custom_fields.rb:203:in `[]'
(eval):49:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
app/controllers/application_controller.rb:531:in `serialize_data'
app/controllers/application_controller.rb:540:in `render_serialized'
app/controllers/categories_controller.rb:408:in `categories_and_topics'
app/controllers/categories_controller.rb:99:in `categories_and_latest'
app/controllers/application_controller.rb:422:in `block in with_resolved_locale'
app/controllers/application_controller.rb:422:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
lib/middleware/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:389:in `call'
lib/middleware/gtm_script_nonce_injector.rb:10:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:233:in `call'

回溯

app/models/concerns/has_custom_fields.rb:203:in `[]'
plugins/discourse-category-lockdown/plugin.rb:18:in `block (2 levels) in activate!'
(eval):49:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:124:in `block in serialize'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:123:in `map'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:123:in `serialize'

环境

HTTP HOSTS: foorumi.katiska.eu

所以我很确定这并非来自插件,而是来自 Discourse 本身,但同样,我不是开发人员。

我是 OP,我没有安装 Calendar 插件(我使用的是不支持该插件的托管 Discourse 级别)。

“子类别导致此问题”是可能的原因……我现在无法确定,因为我的网站上很多东西都坏了。但我确实刚刚创建了一个类别……所以如果(我不记得它是如何工作的)它默认将新类别放在“Public”下,那么我刚刚创建了我的第一个子类别(意外地)。

错误确实看起来是这样…… sort_topics_by_event_start_date……

这在这里注册:

以及分类在这里:

我有一种感觉,这可能是由于我们现在正在进行的分类可扩展性工作而导致的回归……我们会看看。

1 个赞

太好了!这个问题已经被报告过了。我将把它留在这里,以便搜索效果更好。

while trying to load /categories.json)

我们正在调查此事。

此问题由 discourse-calendar 引起,但该插件的最新版本(即将发布)应能解决此问题:

这是 discourse-category-lockdown 的一个问题,我们无法控制。不过我可以提交一个 PR 来解决它。

6 个赞

进一步的问题跟踪请访问 non preloaded custom field - Discourse Category Lockdown - Pavilion

1 个赞

是由于什么原因?所以,这两个插件都因为 X 原因出现了同样的 bug,还是 Discourse 更改了某些会影响到两者的内容?

不,我不是在责怪任何人,我只是想理解术语。

最近的性能改进导致了这个问题。自定义字段是我们代码库中的一种“独角兽”,可供各种插件用于扩展功能。但是,如果使用不当,可能会带来性能损失。此改进着眼于解决此问题:

1 个赞

我已经提交了一个 PR,但它不是我们有权访问的存储库:

6 个赞

我看到它已经合并了,我进行了重新构建,它解决了这个问题 :tada: 感谢您一如既往的快速修复。

1 个赞

好的。运行得很顺利。非常感谢。

Category Lockdown 会给出永恒的旋转器(嗯,这个问题也可能来自 Firefox/iPad 的隐身模式)。但我想这是另一个问题。

1 个赞