嘿,我们最近遇到了一个非常棘手的错误,导致我们的整个网站都无法使用,似乎没有可行的解决方法。我们尝试了从重建到删除/添加插件的所有方法,但都无济于事。我们有一个几个月前的可用备份,但似乎任何尝试用新版本重建的尝试都会直接破坏网站。
显示的主要消息是:
糟糕
为这个讨论论坛提供动力的软件遇到了意外问题。我们对由此带来的不便深表歉意。
有关错误的详细信息已记录,并生成了自动通知。我们会对其进行查看。
无需进一步操作。但是,如果错误状况持续存在,您可以通过在网站的反馈类别中发布讨论主题来提供更多详细信息,包括重现错误的步骤。
这是一个通用的 Discourse 错误消息,在故障排除时不会产生任何实际结果。检查我们的 docker 日志,我发现了这个:
Completed 500 Internal Server Error in 152ms (ActiveRecord: 0.0ms | Allocations: 17980)
ActionView::Template::Error (undefined method `[]' for nil:NilClass)
lib/svg_sprite/svg_sprite.rb:502:in `block in custom_icons'
lib/svg_sprite/svg_sprite.rb:500:in `each'
lib/svg_sprite/svg_sprite.rb:500:in `custom_icons'
lib/svg_sprite/svg_sprite.rb:275:in `block in all_icons'
lib/distributed_cache.rb:25:in `defer_get_set'
lib/svg_sprite/svg_sprite.rb:517:in `get_set_cache'
lib/svg_sprite/svg_sprite.rb:268:in `all_icons'
lib/svg_sprite/svg_sprite.rb:337:in `bundle'
lib/svg_sprite/svg_sprite.rb:285:in `block in version'
lib/distributed_cache.rb:25:in `defer_get_set'
lib/svg_sprite/svg_sprite.rb:517:in `get_set_cache'
lib/svg_sprite/svg_sprite.rb:284:in `version'
lib/svg_sprite/svg_sprite.rb:290:in `path'
app/helpers/application_helper.rb:586:in `client_side_setup_data'
app/views/layouts/application.html.erb:61
lib/topic_list_responder.rb:13:in `block (2 levels) in respond_with_list'
lib/topic_list_responder.rb:9:in `respond_with_list'
app/controllers/list_controller.rb:103:in `block (2 levels) in <class:ListController>'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:356:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'
所以,很自然地,我想到可以通过在第 501 行错误处实现一个 try/catch 来修复这个问题。这是相关的方法:
def self.custom_icons(theme_id)
# Automatically register icons in sprites added via themes or plugins
icons = []
custom_svg_sprites(theme_id).each do |item|
begin
svg_file = Nokogiri::XML(item[:sprite])
svg_file.css('symbol').each do |sym|
icons << sym.attributes['id'].value if sym.attributes['id'].present?
end
rescue Exception => e
puts e
end
end
icons
end
虽然这确实恢复了网站的功能,但遗憾的是,它会导致整个网站上不加载任何图标或图像,所以最终并没有解决任何问题。
我们正在使用以下插件:
- git clone https://github.com/discourse/docker_manager.git
- git clone https://github.com/discourse/discourse-bbcode.git
- git clone https://github.com/discourse/discourse-follow.git
- git clone https://github.com/discourse/discourse-user-notes.git
据我所知,我们曾经使用过一些插件,例如 discourse-follow,在它们被官方支持之前,所以降级它们可能在过程中破坏了某些东西。
更新前的原始版本是 2.8.0.beta2,我们现在是 2.9.0.beta1。
我已经尝试了我能想到的一切,我不确定是否应该在这里发帖,因为我觉得这是一个过于通用的错误,没有人能提供帮助,但如果有人对导致此问题的原因有任何想法,我将不胜感激。
