在本地开发实例中测试一些与主题删除无关的更改时,删除主题返回了 500 Internal Server Error(500 内部服务器错误)。
产生该错误的开发实例运行的是以下确切的 Discourse 提交:
请求如下:
DELETE /t/35
异常来自 discourse-events 的 :post_destroyed 回调:
NameError (uninitialized constant DiscourseEvents::Calendar::Extractor)
plugins/discourse-events/plugin.rb:639:in 'block (2 levels) in Plugin::Instance#activate!'
lib/plugin/instance.rb:676:in 'block in Plugin::Instance#on'
lib/discourse_event.rb:13:in 'block in DiscourseEvent.trigger'
lib/discourse_event.rb:12:in 'DiscourseEvent.trigger'
lib/post_destroyer.rb:91:in 'PostDestroyer#destroy'
app/controllers/topics_controller.rb:818:in 'TopicsController#destroy'
相关的回调似乎正在尝试调用:
DiscourseEvents::Calendar::Extractor.destroy(post)
完整的错误页面报告如下:
NameError (uninitialized constant DiscourseEvents::Calendar::Extractor)
尽管 PostDestroyer#destroy 已经到达触发 :post_destroyed 的位置,但浏览器仍然收到 500 错误,因此删除操作可能在回调抛出异常之前就已经应用了。
这发生在开发环境中。DiscourseEvents::Calendar::Extractor 通常由 events 提供,所以我想知道这是否与开发模式下的重新加载/插件状态有关,而不是实现本身缺失。
当时我正在处理与主题删除无关的代码,但异常本身完全位于 discourse-events 的 :post_destroyed 处理器中。
有没有其他人遇到过 DiscourseEvents::Calendar::Extractor 在开发实例中变为未定义的情况?这是否与开发环境的重新加载/插件状态有关,还是 :post_destroyed 回调应该以不同的方式加载提取器?
