最近、ウェブサイト全体を壊してしまう非常に厄介なバグに悩まされており、解決策が見つかりません。再構築やプラグインの追加・削除など、あらゆる手を試しましたが効果がありませんでした。数ヶ月前の正常に動作するバックアップがありますが、新しいバージョンでこれを再構築しようとすると、サイトが完全に壊れてしまいます。
表示される主なメッセージは次のとおりです。
おっと
このディスカッションフォーラムを支えるソフトウェアで予期せぬ問題が発生しました。ご迷惑をおかけして申し訳ありません。
エラーに関する詳細情報が記録され、自動通知が生成されました。確認いたします。
追加のアクションは必要ありません。ただし、エラー状態が続く場合は、サイトのフィードバックカテゴリにディスカッションのトピックを投稿することで、エラーを再現する手順を含む追加の詳細を提供できます。
これは、トラブルシューティングで実際の結果が得られない、一般的な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です。
考えられることはほとんど試しました。このバグはあまりにも一般的で誰も助けられないのではないかと思い、ここに投稿するかどうか迷いましたが、原因について何かアイデアがあれば、ご協力いただけると幸いです。
