まさに、このトピックが私たちを導くべき場所なのです。元の投稿 には、頻繁に更新されているように見えるリストが含まれています。編集履歴を見ると、どのプラグインがいつ追加されたかがわかります。
これでひとまず完了です!最後に残っているのは「cakeday」で、数ヶ月以内に完了する予定です。
少し前にこれにつまずきました。Discourse の開発を始めようとしていたので、更新ワークフローを練習したかったのです。
# git pull
# bundle install
# pnpm install
# ./bin/rails db:migrate
しかし、Discourse AI プラグインは PostgreSQL の Pgvector プラグイン(以前は存在を知らなかった)を必要とするだろうと推測しています。
== 20230710171141 EnablePgVectorExtension: migrating ==========================
-- enable_extension(:vector)
bin/rails aborted!
StandardError: An error has occurred, this and all later migrations canceled: (StandardError)
ERROR: current transaction is aborted, commands ignored until end of transaction block
/home/john/development/discourse/lib/mini_sql_multisite_connection.rb:109:in 'MiniSqlMultisiteConnection#run'
/home/john/development/discourse/plugins/discourse-ai/db/migrate/20230710171141_enable_pg_vector_extension.rb:8:in 'EnablePgVectorExtension#change'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'block in FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/migration/safe_migrate.rb:28:in 'Migration::SafeMigrate::SafeMigration#migrate'
/home/john/development/discourse/lib/migration/safe_migrate.rb:53:in 'Migration::SafeMigrate::NiceErrors#migrate'
/home/john/development/discourse/lib/tasks/db.rake:267:in 'block (2 levels) in <main>'
/home/john/development/discourse/lib/distributed_mutex.rb:53:in 'block in DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'Thread::Mutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:34:in 'DistributedMutex.synchronize'
/home/john/development/discourse/lib/tasks/db.rake:242:in 'block in <main>'
Caused by:
PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block (PG::InFailedSqlTransaction)
/home/john/development/discourse/lib/mini_sql_multisite_connection.rb:109:in 'MiniSqlMultisiteConnection#run'
/home/john/development/discourse/plugins/discourse-ai/db/migrate/20230710171141_enable_pg_vector_extension.rb:8:in 'EnablePgVectorExtension#change'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'block in FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/migration/safe_migrate.rb:28:in 'Migration::SafeMigrate::SafeMigration#migrate'
/home/john/development/discourse/lib/migration/safe_migrate.rb:53:in 'Migration::SafeMigrate::NiceErrors#migrate'
/home/john/development/discourse/lib/tasks/db.rake:267:in 'block (2 levels) in <main>'
/home/john/development/discourse/lib/distributed_mutex.rb:53:in 'block in DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'Thread::Mutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:34:in 'DistributedMutex.synchronize'
/home/john/development/discourse/lib/tasks/db.rake:242:in 'block in <main>'
Caused by:
ActiveRecord::StatementInvalid: PG::FeatureNotSupported: ERROR: extension "vector" is not available (ActiveRecord::StatementInvalid)
DETAIL: Could not open extension control file "/usr/share/postgresql/extension/vector.control": No such file or directory.
HINT: The extension must first be installed on the system where PostgreSQL is running.
/home/john/development/discourse/plugins/discourse-ai/db/migrate/20230710171141_enable_pg_vector_extension.rb:6:in 'EnablePgVectorExtension#change'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'block in FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/migration/safe_migrate.rb:28:in 'Migration::SafeMigrate::SafeMigration#migrate'
/home/john/development/discourse/lib/migration/safe_migrate.rb:53:in 'Migration::SafeMigrate::NiceErrors#migrate'
/home/john/development/discourse/lib/tasks/db.rake:267:in 'block (2 levels) in <main>'
/home/john/development/discourse/lib/distributed_mutex.rb:53:in 'block in DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'Thread::Mutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:34:in 'DistributedMutex.synchronize'
/home/john/development/discourse/lib/tasks/db.rake:242:in 'block in <main>'
Caused by: PG::FeatureNotSupported: ERROR: extension "vector" is not available (PG::FeatureNotSupported)
DETAIL: Could not open extension control file "/usr/share/postgresql/extension/vector.control": No such file or directory.
HINT: The extension must first be installed on the system where PostgreSQL is running.
/home/john/development/discourse/plugins/discourse-ai/db/migrate/20230710171141_enable_pg_vector_extension.rb:6:in 'EnablePgVectorExtension#change'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'block in FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/migration/safe_migrate.rb:28:in 'Migration::SafeMigrate::SafeMigration#migrate'
/home/john/development/discourse/lib/migration/safe_migrate.rb:53:in 'Migration::SafeMigrate::NiceErrors#migrate'
/home/john/development/discourse/lib/tasks/db.rake:267:in 'block (2 levels) in <main>'
/home/john/development/discourse/lib/distributed_mutex.rb:53:in 'block in DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'Thread::Mutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:34:in 'DistributedMutex.synchronize'
/home/john/development/discourse/lib/tasks/db.rake:242:in 'block in <main>'
Tasks: TOP => db:migrate
それをインストールすることもできますが、マイグレーションがスキップされるように、このレベルでプラグインを無効にする方法があるかどうか興味があります。(開発のために興味のない「プラグイン」のために追加のソフトウェアをインストールしたくありません。)
本日これより前に私もこの問題に遭遇しました。ChatGPTの助けを借りて、sudoでパッケージをインストールしました。これも気になっています。もしかしたら、/plugins ディレクトリからプラグインフォルダを削除すると役立つかもしれません
…しかし、後で git pull すると元に戻ってしまうかもしれません。
この変更には反対です。通常、ソフトウェア開発において、リーンコアを持つということは、メインのディストリビューションをより小さく、速く、攻撃対象領域を少なくできることを意味します。私の最後のプラグインの経験では、プラグインコードは「無効」な状態でも実行できることがわかりました。これはプラグイン作成者がチェックする必要があるようで、リスクとブロートが大幅に増加するように思われます。
最も差し迫った問題は、インストールガイドに指示が更新されていないこと(おそらく私が見落としただけでしょうか?)です。何をインストールすれば再び動作するようになるのかが不明確です。postgresql-16-pgvectorというUbuntuパッケージをインストールすることでいくつかのエラーを解決しましたが、db:migrateを実行中にいくつかのベクトルエラーが発生しました。ローカルでAIプラグインを削除することで回避できました。
いずれにせよ、これは非常に多くの追加コードであり、これらのプラグインの多くはほとんどのDiscourseコミュニティのユースケースに全く関係がありません。(これらは悪いプラグインだと言っているのではありません!必要としているコミュニティには非常に役立つと確信しています。しかし、すべてのコミュニティフォーラムがZendesk統合などで出荷する必要があるとは思いません)。特にAIプラグインは、現在問題を発生させている追加要件を考えると、IMOは確実に削除されるべきです。
個人的なレベルでは、管理パネルにログインしたときに、たとえコードが不活性であるべきであっても、多くの広告プラグインが突然表示されると、非常に心配になります。**私は、たとえ無効であっても、デフォルトで私のインストールに大きなテクノロジー広告プラグインを一切望まないことを、最も強い言葉で伝えたいです。**それは、ユーザープライバシーに対して歴史的に信じられないほど虐待的であった業界であり、Discourseはデフォルトでそのような統合を出荷することで、自らを助けていません。広告を望む人々は、必要なプラグインを簡単に見つけることができるでしょう。すべてのインストールに含める必要はありません。
TLDR:この変更を再考してください。 ![]()
Discourse は、公式ホスティングで常に提供されるプラグインをコアに統合しています
管理インターフェイスに余分なブロートウェアが追加されることに同意します。多くのブランド名が私の脳への広告としてカウントされます。これはクールではありません。大手ブランドを避けようと懸命に努力しているフリーソフトウェアの支持者として、これは数年前にUbuntuがAmazon、Googleなどの企業に完全に植民地化される前に取ったステップだと考えています。それらをあなたの目に放っておくと、それらは最終的にあなたを飲み込むでしょう。
プラグインをコアにバンドルすることは、開発者が時間をかけてプラグイン機能を誤って要件に変える機会をもたらしますが、プラグインとして保持することで、そのような間違いは起こらないことが保証されます。
@teamはこの変更の根拠を明確にしてもらえますか?
Discourseインフラストラクチャでのインストールの高速化の問題であれば、CIで自動的に作成されるdiscourse-hosting-bundleパッケージを作成することで同じ結果が得られるのではないでしょうか?
@david、影響を受けるプラグインのリストをアルファベット順に並べていただけますか?
Discourse の初回ユーザーによりスムーズな体験を提供し、最初からより「フル機能」の Discourse 体験を得られるようにすることが、ここでの動機です。
もう 1 つの動機は、チームやコミュニティ貢献者の開発者体験です。これらのプラグインがすべてコアにバンドルされているため、異なるコアバージョンとの互換性を考慮する必要がなくなりました。これは、現在非常に活発に開発されており、関連するコアの変更と並行して進められている discourse-ai のようなプラグインにとって特に役立ちます。
ブランド認証プラグインは、Google/Facebook/etc. のような既存のコア認証方法と同様に、コアに吸収される可能性が最も高いものです。そのため、近い将来リストから削除される可能性が高いです。
この変更は、当社のホスティングのパフォーマンスとは関係ありません。すでに、説明されているように、これらのプラグインすべてを含む、さらに多くのプラグインを含む事前構築済みのディストリビューションがありました。![]()
順序を修正しました ![]()
すでに op で回答されています。
この例をいくつか示します。
- プラグインのためにコアに何かを追加する場合、バージョンの心配をする必要はありません。両方が同じバージョンであることを知っています。
- コードが両方に存在する場合、別のプラグインに依存するプラグインをテストするのが簡単になります。
- コアで何かを変更すると、プラグインで仕様を修正するために複数の PR を行う必要があることがよくありますが、これからはスタンドアロンの PR が 1 つだけになります。
最終結果は、Discourse チームがこのような問題に対処するのではなく、製品の改善と保守により多くの時間を費やすことができるようになるため、最終的にはあなたも勝ちます。
それらがUIから消えてくれることを強く望みますが、それらは単にスペースを占めているだけで、オプションでも隠すこともできません。コアの一部なのです。まさにそれが私たちが懸念している理由です。
初めてのユーザーエクスペリエンスに関しては、コンテナテンプレートを変更して公式バンドルを含め、文書化することが機能するかもしれません。
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
# The docker_manager plugin is mandatory for automated web-based updates
- git clone https://github.com/discourse/docker_manager.git
# The following plugins are installed on all Discourse hosted instances.
# Uncomment the line by removing `#` before the `- git clone` line to enable them.
# See https://meta.discourse.org/t/bundling-more-popular-plugins-with-discourse-core/373574/
# Discourse Advertising plugin (Ads): https://meta.discourse.org/t/discourse-advertising-plugin-ads/33734
#- git clone https://github.com/discourse/discourse-adplugin
# Discourse Affiliate
#- git clone https://github.com/discourse/discourse-affiliate
# ...
# ...
# Please add other plugins below. For a list of official plugins, see:
# https://meta.discourse.org/tag/official
# For all available plugins, see:
# https://meta.discourse.org/c/plugin/22
開発者のエクスペリエンスに関しては、プラグインのバージョンを、上記のような文書化戦略を使用してコメント解除するpupsルールを使用するなど、別のより侵襲性の低い方法で自動的に渡すことができるはずです。
それを行うコンテナテンプレートさえ持つことができます。
templates:
- "templates/discourse.hosting.yml"
- "templates/discourse.core-bundle.yml"
私の最初の印象は良かったことに注意してください。まだ私のレーダーに乗っていなかった興味深いプラグインをいくつか発見できました。しかし、はい、過去10年間、あなたが最適化し、最も一般的な共通点を探しているのを見てきたので、このような提案をどのように処理するのか驚いています。
git clone コマンドが通常ある場所に rm -rf discourse-ai を追加できると思います。自分でやったことはありません。
はい、技術的にはプラグインディレクトリ内のすべてのフォルダを削除しても、コアのDiscourseは引き続き機能します。
Discourseチームが開発したこれらのプラグインは、ルールに従い、最小限のオーバーヘッドを追加すると考えるのが妥当でしょう。すべてを有効にしておくことで、それらがすべて連携し、同じ要件を共有していることを確認しやすくなります。
組み込みのPostgresではなく、外部のPostgresを実行していますか?しばらく更新されていない2コンテナセットアップを実行していますか?
それらを削除するように仕向けることはできますが、悪徳企業のアカウントを作成してトラッキングを開始するためのキーを取得しない限り、何も実行できません。
ご返信ありがとうございます。
そうだといいのですが、バグや攻撃の対象が増えることは確かです。その見返りに、これらのプラグインを使用しないコミュニティ(ほとんどのコミュニティが該当するでしょう)には何のメリットもありません。
Discourse は実際の問題を特定したと思いますが、間違った解決策を見出したと思います。
Discourse の開発/プラグインエコシステムの脆弱性という根本的な問題があることには完全に同意します。動くターゲットに対して開発するのは確かに困難であり、コアの API の変更はそれを難しくしています。ある程度は、最先端のアップストリームに対して開発するということはそういうものですが、だからこそデフォルトの動作であるべきではありません。単純なプラグインがいくつかあれば、あなたの問題(私のものよりもはるかに広範囲ですが)を理解し、共感することができます。
しかし、Discourse がここでやっていることは、問題を先送りしているにすぎません。Discourse の問題は解決するかもしれませんが、他のプラグイン開発者の問題は解決しません。他の誰もが、より小規模ではありますが、同じ苦痛を経験しています。
より良い解決策は、開発対象となる、より堅牢な LTS シリーズを持つことです。これは他の場所で議論されていることはわかっているので、繰り返しませんが、コミュニティ、プラグイン開発者、そして Discourse の従業員にとっても最大の課題の 1 つは、LTS がないことです。安定版は積極的に使用しないように推奨されています。より伝統的な開発パイプラインが使用されていれば、プラグイン開発ははるかに容易になります。いつ問題が発生するか(メジャーバージョンアップグレード)を知ることができ、それに応じて計画を立てることができます。そうでなければ、マイナーアップグレードでフォーラムがランダムに壊れることはないだろうと確信できます。(これはおそらく Discourse の最大の悩みの一つであり、フォーラムの選択肢について議論する際に他の場所で提起されているのを見たものです。不安定さは本当の欠点です。)
はい — リンクの通り、コンテナベースではない開発環境でこれに遭遇しました。(まだ本番環境のコンテナでは試していません)
これが私が心配していることの 1 つだと思います。もし「標準」パスがこれらのプラグインの存在を前提としているなら、他の全員が広告プラグインを受け入れているため、バグに遭遇する可能性があります。予期しないバグが発生するリスクを冒すか、追加のプラグイン負荷に対処する必要があります。私の目標は、デプロイメントの安定性を可能な限り高めることです。
また、他のフォーラムと比較して、Discourse のコア自体がリソース使用量の点でかなり重いことも指摘しておく価値があります。パフォーマンスの問題をさらに悪化させないように、コアを軽量に保つことは価値があると思います。
無効になっているときに追跡/電話ホーム JS をプルしていないことを確認するために、これらをまだ監査していませんが、それまではあなたの言うことを正しいと仮定します。誰かがこれを再確認してくれることを願っています。もしそれが偽であることが判明した場合、大スキャンダルになるでしょう。
Hellekin の散らかりに関する指摘は妥当だと思います。また、ビッグテック広告プラグインに関して彼らが言っていることは、オープンソースコミュニティの一部、特にオープンソースフォーラムを使用する可能性が高い層には、あまり受け入れられないだろうとも思います。
とにかく、私のフィードバックを聞いていただけたことに感謝します。たとえそれが容易ではないとしても ![]()
どれがプルーフリード済みで、どれがそうでないかを判断するのは難しいと思います。
Crowdinからすべてのデータではなく、テキストのみが追加されたため、事前にオープンなコメントがないか確認したかどうか、しばらく疑問に思いました。しかし、その質問の答えを知りたくもないと仮定します。最終的には、数ヶ月間誰も応答しないか、翻訳者からの質問やコメントが単に消えているかのどちらでも違いはありません。
新しいバンドルでプラグインディレクトリを削除した際に、プラグインが意図せず必須要件にならないことを確認する副作用のないテストはありますか?
コアテストスイートはプラグインをロードせずに実行されるため、コアからプラグインへの依存関係はCIによって検出されるはずです。
プラグインをクローンする行をコメントアウトしましたが、再度「launcher rebuild app」を実行すると、同じメッセージが表示されます。
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 546 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:in `spawn'
exec failed with the params {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
---
HINT: プラグイン 'discourse-reactions' は現在 Discourse にバンドルされており、コンテナ構成に含めるべきではありません。
コンテナ構成ファイルから 'git clone https://github.com/discourse/discourse-reactions' の行を削除し、再度試してください。
詳細については、https://meta.discourse.org/t/373574 を参照してください。
---
---
HINT: プラグイン 'discourse-data-explorer' は現在 Discourse にバンドルされており、コンテナ構成に含めるべきではありません。
コンテナ構成ファイルから 'git clone https://github.com/discourse/discourse-data-explorer' の行を削除し、再度試してください。
詳細については、https://meta.discourse.org/t/373574 を参照してください。
---
---
HINT: プラグイン 'discourse-solved' は現在 Discourse にバンドルされており、コンテナ構成に含めるべきではありません。
コンテナ構成ファイルから 'git clone https://github.com/discourse/discourse-solved' の行を削除し、再度試してください。
詳細については、https://meta.discourse.org/t/373574 を参照してください。
---
** FAILED TO BOOTSTRAP ** スクロールアップして、以前のエラーメッセージを探してください。複数ある可能性があります。
失敗の原因は、FAILED の行の上にあります。