Discourseの更新/再構築を最新バージョンにすると、ウェブサイトが元に戻せなくなります

最近、ウェブサイト全体を壊してしまう非常に厄介なバグに悩まされており、解決策が見つかりません。再構築やプラグインの追加・削除など、あらゆる手を試しましたが効果がありませんでした。数ヶ月前の正常に動作するバックアップがありますが、新しいバージョンでこれを再構築しようとすると、サイトが完全に壊れてしまいます。

表示される主なメッセージは次のとおりです。

おっと
このディスカッションフォーラムを支えるソフトウェアで予期せぬ問題が発生しました。ご迷惑をおかけして申し訳ありません。

エラーに関する詳細情報が記録され、自動通知が生成されました。確認いたします。

追加のアクションは必要ありません。ただし、エラー状態が続く場合は、サイトのフィードバックカテゴリにディスカッションのトピックを投稿することで、エラーを再現する手順を含む追加の詳細を提供できます。

これは、トラブルシューティングで実際の結果が得られない、一般的な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です。

考えられることはほとんど試しました。このバグはあまりにも一般的で誰も助けられないのではないかと思い、ここに投稿するかどうか迷いましたが、原因について何かアイデアがあれば、ご協力いただけると幸いです。

「いいね!」 1

Postgresの問題である可能性があります。Postgresがバージョン10から13にアップグレードしようとしているのかもしれません。

Postgresに関連するログが表示されるかどうかを確認してください。

「いいね!」 2

/shared/standalone/log/rails に含まれるログのことでしょうか?それらにはPostgresに関する記述はありません。
/shared/standalone/log/var-log/postgres に含まれるログについては、エラー発生時刻の19:51:08頃に、特に異常とは思えないリクエストがあります。エラーや失敗しているように見えるものはありません。また、アップデート時刻頃には、ここには何も記録されないと思います。

何か特に確認すべきことはありますか?

apt-get update | apt-get upgrade が最新であることを確認してください。
その後、./launcher rebuild app を実行してください。

エラーを確認するか、/var/discourse/shared/standalone/log/rails を確認してください。

「いいね!」 1

apt-get updateapt-get upgrade の両方を更新し、完全な再構築を実行しましたが、残念ながら同じエラーに遭遇しました。見たところ、何も変更されていません。

「いいね!」 1

いくつか質問があります。

  1. 再構築はエラーなく完了しましたか?
  2. セーフモードでサイトを読み込もうとしましたか?
  3. 確認のため、サイトのURLを共有していただけますか?
「いいね!」 1
  1. はい、再構築はエラーなく完了します。
  2. はい、上記で言及したエラーを修正したときと同様に、ウェブサイトは「アイコン/画像なし」のようなモードで起動しますが、何も読み込まれません。
  3. はいでもあり、いいえでもあります。サイトには露骨なコンテンツが含まれており、共有しても問題ないか周りに確認する必要があります。

その間、別のことを発見しました。セーフモードでウェブサイトを閲覧していると、DiscoTOCがエラーを発生させていることに気づきました。それを無効にすると、セーフモードなしでウェブサイトは正常に動作しますが、アイコン/画像は依然として正しく読み込まれません。

すべての画像はコンソールで404を発生させており、ファビコンのようなほとんどのアイコンは500を発生させています。
当然ながら、これらはすべて以前は正常に機能していました。

さらに、再構築によってデータベースからすべての画像参照がクリアされた可能性はありますか?

全員に最新情報を提供するため、その後、さまざまなスレッドのいくつかの提案を試しましたが、2つだけ挙げるとすれば次のとおりです。

残念ながら、提案のいずれも役に立たず、rake posts:rebakerake posts:missing_uploadsrake uploads:recover_from_tombstone のいずれも機能しませんでした。また、sidekiq ダッシュボードも確認しましたが、何も復元されませんでした。

現在失われている画像を復元する方法について、何かアイデアがある方がいらっしゃいましたら、ぜひお聞かせいただけると幸いです。

試行錯誤の結果、最終的に画像を正常に復元することができたため、この問題は解決済みとします。

「いいね!」 1

最初に知っておきたかったことはありましたか?

「いいね!」 3

最初からセーフモードでウェブサイトをより徹底的に確認すればよかったのかもしれません。また、認めなければならないのは、すでに作業が行われた後にサイトの復旧に関わっただけで、画像は別のバックアップフォルダにあり、移動させるだけでよかったのです。

「いいね!」 4

推測するのは誰にとっても難しいですね!解決してよかったです。

「いいね!」 1

このトピックは、最後の返信から30日後に自動的にクローズされました。新しい返信は許可されていません。