アップデート後にウェブサイトが真っ白になる

こんにちは、

Discourse フォーラムを更新したところ、現在ホーム画面と管理画面が空白になっています。HTML は問題なさそうですし、RSS も正常に動作しています。

JS エラーがテーマに起因していることが判明しました。問題はここから来ている可能性がありますか?
Capture d'écran 2020-08-22 à 15.57.03

これをどうすれば修正できますか?CLI からテーマの JS コードを変更または無効化することは可能ですか?新しいテーマをインストールすべきでしょうか?

追記:インストールされている他のテーマがないため、?preview_theme_id= を使用できません。

「いいね!」 1

こんにちは、@CamilleRoux さん

直接 DB クエリを実行することに慣れていれば、SQL でデフォルトのテーマを DB 上で直接変更することも可能です。

参考になれば幸いです。

「いいね!」 1

Discourse セーフモードの使い方を試しましたか?

「いいね!」 2

何をしているのですか? :thinking:

  • セーフモードを確認: https://forum.humancoders.com/?safe_mode=no_custom%2Cno_plugins%2Conly_official

  • ログ https://forum.humancoders.com/logs(非公開?)

SSH を介して以下を実行してみてください:

cd /var/discourse
git pull
./launcher rebuild app
「いいね!」 3

セーフモードは機能していません…同じエラーです:

ReferenceError: Discourse is not defined
    at https://forum.humancoders.com/assets/start-discourse-efa4e5abfbd1b50b5152ffbe64d5dcea9f7c33f766dcc6387e2711f0f2112148.js:1:1

すでに ./launcher rebuild app で再構築を行いました。

他のテーマはインストールされていません。そのため、CLI で新しいテーマをインストールするか、既存のテーマを修正する必要があります。その方法がわかりません。

ああ、つまりデフォルトのテーマに問題があって、それを無効化する方法がないってことですか?もしそうなら、カスタマイズをテーマコンポーネントに記述しておくべきだったんですね(今このタイミングでそれを言うのはあまり親切じゃないですけどね)。ただ、それが原因かどうかは完全には確信が持てません。

サードパーティのプラグインは入っていませんか?

おそらくやるべきことは、Rails コンソールで新しい空のテーマを作成し、デフォルトテーマをそれに切り替えることかもしれません。ただ、その具体的な手順については、今すぐには思い出せません。

「いいね!」 3

まだ問題がテーマに起因するものかどうかは確信が持てません。しかし、もしそうであれば、空のテーマを作成してデフォルトに設定することで解決できるかもしれません。その方法がわからないんです :frowning:

私もです。:man_shrugging:

私もです。きっと解決策は見つかると思うのですが、週末にやりたくない報酬付きの仕事が山積みなんです。

こんにちは、@CamilleRoux さん

デベロッパーコンソールで UA 文字列を Google Bot に設定して、あなたのサイトを調べました。これにより、Ember SPA を含まない Rails だけのサイトが表示されます。

Rails の観点からはあなたのサイトは「OK」であることが確認できました。つまり、コンテナは正常に動作しており、あなたが推測した通り、テーマ(コンポーネント)に JavaScript の問題があることがわかります。

添付画像をご参照ください:

@CamilleRoux さん

psql プロンプトにアクセスできますか(またはrailsコンソールを使っても構いません)。以下のクエリを実行してください:

インストールされているテーマの数を確認しましょう:

discourse=# select count(*) from themes;
 count 
-------
    22
(1 row)

現在のデフォルトテーマの ID を確認しましょう:

discourse=# select value from site_settings where name = 'default_theme_id';
 value 
-------
 3
(1 row)

また、以下のクエリも実行してください:

discourse=# select id, name, component, enabled from themes;
 id |           name            | component | enabled 
----+---------------------------+-----------+---------
  3 | Light                     | f         | t
  6 | Minima                    | f         | t
  7 | Hamburger Theme Selector  | t         | t
  2 | Material Dark             | f         | t
  8 | Vincent                   | f         | t
  5 | Material                  | f         | t
  9 | Simple                    | f         | t
 10 | Graceful Wide             | f         | t
 11 | Dark Wide                 | f         | t
 14 | Alien Night               | f         | t
 39 | md-composer-extras-neo    | t         | t
 40 | Plugin Outlets            | t         | f
 15 | User Card Directory       | t         | f
 41 | Raw Post Button           | t         | t
  4 | Graceful                  | f         | t
  1 | Dark for GSE              | f         | t
 42 | Dark                      | f         | t
 43 | discourse gifs            | t         | t
 44 | Cookie Consent Banner     | t         | t
 46 | Graceful Edits            | t         | t
 45 | Neo Stuff Scratch Sheets  | t         | t
 48 | Unformatted Code Detector | t         | t
「いいね!」 4

OBTW、

@CamilleRoux

この件について、今すぐテストしてみました。

上記の私の投稿で記載したクエリを実行して、すべてのテーマの一覧を取得し(現在のテーマの状態を記録しておいてください)、データベースにアクセスして Rails または psql からこのクエリを実行できる場合、以下の手順を試してみてください。

すべてのテーマコンポーネントを無効化するクエリ

discourse=#  update themes set enabled = false where component = true;

上記のクエリを実行すると、すべてのテーマコンポーネントが無効になります。

その後、破損したサイトにアクセスしようとした際に「何が起こるか」を確認できます。

もし私があなたの現在の状況にあった場合、ボット UA としてサイトを調査した結果に基づき、すべてのテーマコンポーネントを無効にします。

実際には、ナビゲーションリンクに関連するテーマコンポーネントから順に一つずつ無効にします(以下の JS エラーを参考にしてください)。なぜなら、私は直接 SQL データベースクエリを実行することに慣れているからです。あなたは SQL のスキルに自信がありますか?

もしこれに不安がある場合は、私にメッセージを送り、アクセス権を付与してください。あなたが置かれている「あまり良くない状況」から抜け出すお手伝いをします。現時点で入手している情報に基づけば、あなたが再び正常に運用できるようになると確信しています :slight_smile:

関連する JS エラーも参照:
Discourse.ExternalNavItem=Discourse.NavItem.extend({href:function(){return this.get('href');}.property('href')});I18n.translations.fr.js.filters.formations={title:"Formations",help:"Formations pour développeur·se·s"};Discourse.NavItem.reopenClass({buildList:function(category,args){var list=this._super(category,args);list.push(Discourse.ExternalNavItem.create({href:'https://www.humancoders.com/',name:'formations'}));return list;}});jQuery(function($){$(document).on("ready",function(){if(Cookies.get('hcFirstPage')==undefined){$(document).on('click','.toggle-menu',function(e){e.preventDefault();$('.main-nav').toggleClass('show');});var tweenBounce=TweenMax.to('#topbar',1.2,{maxHeight:"50px",delay:2,ease:Power1.easeInOut});var tweenBounceBack=TweenMax.to('#topbar',1.2,{maxHeight:"4px",delay:5.5,ease:Power1.easeInOut});Cookies.set('hcFirstPage',true,{expires:.04});}else{var tweenBounce=TweenMax.to('#topbar',0);}
window.addEventListener('unload',function(){Cookies.remove('hcFirstPage');});var tweenOpen,tweenClose;$('.topbar-toggle').on('mouseenter',function(){tweenBounce.kill();tweenOpen=TweenMax.to('#topbar',.4,{maxHeight:"50px",ease:Power1.easeInOut});});$('#topbar-zone-click').on('mouseenter',function(){tweenBounce.kill();tweenOpen=TweenMax.to('#topbar',.4,{maxHeight:"50px",ease:Power1.easeInOut});});$('#topbar').on('mouseenter',function(){tweenBounce.kill();tweenOpen=TweenMax.to('#topbar',.4,{maxHeight:"50px",ease:Power1.easeInOut});});$('#topbar-zone-click').on('mouseleave',function(){tweenOpen.kill();tweenClose=TweenMax.to('#topbar',.4,{maxHeight:"4px",ease:Power1.easeInOut});});$('.topbar-toggle').on('mouseleave',function(){tweenOpen.kill();tweenClose=TweenMax.to('#topbar',.4,{maxHeight:"4px",ease:Power1.easeInOut});});$('#topbar').on('mouseleave',function(){tweenOpen.kill();tweenClose=TweenMax.to('#topbar',.4,{maxHeight:"4px",ease:Power1.easeInOut});});});});
「いいね!」 6

OK、皆様のおかげで助かりました。
これは古いインストールで、他のテーマやコンポーネントも入っていなかったため、テーマを変更したり、すべてのコンポーネントを無効化したりすることができませんでした。
そのため、古いバックアップを復元し、テーマを更新してから Discourse を更新しました。以前はエラーが2つありましたが、今は1つに減りました。

エラーの内容は以下の通りです:

Uncaught ReferenceError: Discourse is not defined
<anonymous> /assets/start-discourse-efa4e5abfbd1b50b5152ffbe64d5dcea9f7c33f766dcc6387e2711f0f2112148.js:1

このファイルの内容は以下の通りです:

Discourse.start();

デフォルトテーマの古いバージョンが残っているのでしょうか?(現在のテーマは2016年に、デフォルトテーマにCSSとJSをいくつか追加して作成されたものです)

追伸:ウェブサイトは、Discourse を更新せずにバックアップを復元したことで再び動作しています。

「いいね!」 4

であれば、私は新しい汎用テーマを作成してデフォルトに設定し、その後アップグレードを実行してテーマを修正すると思います。

「いいね!」 4

少しの更新情報です:このバグは Discourse の一部のバージョンで発生しますが、すべてのバージョンではありません。
stabletests-passed では正常に動作していますが、beta では動作しません。したがって、このバグはすでに修正済みですが、beta にはまだコミットされていないと認めます。

「いいね!」 2

しかし、問題はあなたのテーマのカスタマイズにあるのか、それともデフォルトのものにあるのでしょうか?

現在のベータ版では、テーマに関係なく同じバグが発生します。