テーマコンポーネントのパス

こんにちは!

最新バージョンにアップグレードしたいのですが、いくつかのテーマコンポーネントに問題があります。これらはすべて私が独自に作成したコンポーネントで、GitHub から GitLab へ移動させました。Discourse をアップグレードしようとする際(Discourse 内からではなく)、それらが利用できなくなったためエラーが発生します。Discourse 内で削除を試みましたが、削除されません。
そこで質問です。それらをサーバー上で直接削除するためのパスはどこにありますか?見つけることができません。

セーフモードを試してみましたが、セーフモードではフォーラムにアクセスできませんでした。


編集:

すべてのテーマとコンポーネントが保存されている app.yml のようなファイルはありますか?もしあれば、そのリストを削除して、それらなしで Discourse を再構築できますか?

これは解決すべき問題だと思います。正しいアプローチは、旧場所から来たすべてのテーマとテーマコンポーネントを削除し、新しい場所からそれらをインポートすることです。

「いいね!」 2

これは不可能です。そうすると Discourse が無限ループに陥ってしまうからです。そのため、別の方法で削除する方法を尋ねたのです。
セーフモードにも入れません。
バックアップが古すぎるため、再インストールもできません。
./launcher rebuild app を実行した後、ゲストがフォーラムにアクセスできないことがわかりました。

では、どうすれば再び動作させることができるでしょうか?

「いいね!」 1

なぜですか?代わりに何が起きますか?

バックアップの古さは問題になりません。5 年前のバックアップでも問題なく復元できます。

正直なところ、テーマコンポーネントはあなたにとって最も深刻な問題ではないように思えます。

UI 経由でのアンインストールが不可能な場合、残念ながら他の方法でも失敗するでしょう。

「いいね!」 1

データベース上で手動でコンポーネントを無効化するのは、最後の手段となり得るような解決策だと思います。非常にリスクは高いですが、他に選択肢がない場合は実行可能です。

少なくともコンポーネントを無効化することで、再構築を成功させることができ、それによって管理インターフェースへのアクセスが可能になり、GitLab からコンポーネントを削除して再インストールできるようになります。

「いいね!」 1

何も起きません。セーフモードではサイトが利用できません。

もちろん関係します。最後のバックアップ以降のすべての投稿が消えてしまうからです。

いいえ、コンポーネントを削除する前にアップデートを試みるまで、フォーラムは正常に動作していました。

@itsbhanusharma
回答ありがとうございます。テーマとコンポーネントがデータベースに保存されているとは知りませんでした。

データベースにはどのようにアクセスすればよいですか?

編集:
わかりました、データベースにはアクセスできました。おそらく theme_settings テーブルのことですね。
コンポーネントをすべて削除するにはどうすればよいですか?

あなたの投稿を誤って読みました。復元が失敗したからといって、古すぎるとおっしゃったのかと思いました。

「いいね!」 1

それらはデータベースに保存されていませんが、有効化/無効化の状態はデータベース自体に保存されています。

手順を正確に覚えてはいませんが、最近、同様に破損したインストールを修正しました。

ここで最も重要なのは、コンテナがまだ実行されているかどうかを確認することです。実行中の場合、データベースから問題のあるコンポーネントを無効化する方法についてアドバイスできるかもしれません。

はい、コンテナは引き続き実行中です。
コンポーネントを無効にできれば、非常に助かります。

実際には、データベース(theme* で始まるテーブル)に完全に保存されています。

それら(テーブル内のすべてではなく)を削除するにはどうすればよいですか?

思い付きですが、rails コンソールから実行してください。テーマを表示している際の URL から ID を探します。

t = Theme.find(123)
t.enabled = false
t.save

まあ、それは問題ですね。
pgAdmin のようなものを使って、直接データベースにアクセスすることはできないのでしょうか?
管理エリアにアクセスできなくなったため、テーマやコンポーネントの ID がわかりません。


編集:
テーマとコンポーネントの特定はできました。
無効化しても機能しないため、rails c で削除するにはどうすればよいでしょうか?
rake で削除しようと試みましたが、rake でも削除できませんでした。

詳細を教えていただけますか?エラーが発生しますか?もしそうであれば、どのようなエラーですか?それとも何も影響がないのでしょうか?

rake themes:uninstall https://github.com/link/to/git.git
rake aborted!
タスク 'themes:uninstall' の構築方法がわかりません(利用可能なタスクのリストは `rake --tasks` で確認してください)
意図したのは themes:install でしょうか?
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
(--trace を付けてタスクを実行して完全なトレースを表示してください)

それとも、rake で削除を行う正しいコマンドは何でしょうか?

rake --tasksrake -AT でコマンドのリストを取得できますが、テーマやコンポーネントを削除するコマンドは見当たりません。

rails c でテーマを無効化することはできますが、リロードすると依然として破損した古いテーマが表示されてしまいます。

Theme.where(user_selectable: true).update_all(user_selectable: false)
Theme.where(auto_update: true).update_all(auto_update: false)
Theme.clear_default!

Rails コンソールでこれらを実行し、その後サイトが読み込めるか確認してください。もし読み込めない場合は、再ビルドを試してください。

「いいね!」 6

あなたの指示に従って再構築したところ、無事に動作し、フォーラムもオンラインに戻りました!:+1: :slightly_smiling_face:

お手伝いしてくださった方々、本当にありがとうございます!

「いいね!」 1

@Osama さん、こんにちは。最近、テーマコンポーネントがリビルドを壊す問題について心配しています。

これに対処するための howto が必要だと思います。

ここで提示されている修正は、「GitHub URL が壊れているためにビルドが失敗する」ケースのみを対象としているのでしょうか?

JavaScript にエラーがあるためにビルドが失敗する場合、howto に記載すべき、コマンドラインからテーマを無効化または削除する類似の方法はありますか?

編集:「Alternative Logos」が含まれている場合に失敗するケースのように…。

私もこれについてしばらく考えていましたが、私の意見では、これは一部のコミュニティには理にかなっていますが、すべてのコミュニティに当てはまるわけではありません。一部のコミュニティでは、カスタマイズやテーマをサイトのアイデンティティの不可欠な部分として扱っており、サイトがデプロイされた際にカスタマイズに問題があるかどうかを確実に知りたいと考えています。一方、他のコミュニティでは、バニラの Discourse インストールにいくつかのカスタマイズやコンポーネントを少し追加するだけで、それらが数日使えなくても問題ないと考えています。

新しいテーマやコンポーネントをインストールする際に、「Discourse の更新時に自動更新する」というチェックボックスをデフォルトでオフにするべきではないでしょうか?現在はデフォルトでオンになっていますが、オフにするべきだと考えています。ただし、これについてはより広範な議論が必要です。

いいえ、上記のコードスニペット(特に 2 行目)は、現在インストールされているすべてのテーマおよびコンポーネントに対するデプロイ時の自動更新を無効にするものです。したがって、テーマの自動更新に起因するビルドの失敗(JS/CSS エラーを含む)をすべて修正できるはずです。howto には 2 行目のみを含めるべきです。

「いいね!」 1

私もちょうどこの問題に遭遇しました。パブリックリポジトリにリンクされたコンポーネントがあり、その後そのリポジトリをプライベートに変更すると、再ビルドが失敗します。これは不快なことで、ユーザーが変更を加えた結果、数ヶ月後にシステム管理者にとってサイトが破損してしまう可能性があります。

Path of theme components - #16 by Osama に記載されているコマンドは、私の場合非常にうまく機能しました。Rails コンソールに入る方法についての指示を追加することをお勧めします。

./launcher start app
./launcher enter app
rails c