ActivityPubプラグイン

こんにちは:wave:
まず、この実現に注がれた素晴らしい仕事に感謝します。これのおかげで、コミュニティを Discourse に移行するという決断にこれ以上ないほど満足しています。

プラグインをインスタンスに追加し、アクターを1つ設定しました。しかし、アクターが関連付けられたカテゴリに投稿すると、「内部サーバーエラー」が発生します。ログからは、リクエストが 500 エラーで失敗したこと以外、ほとんど何も見つけられませんでした。

[no timestamp]  by PostsController#create as JSON
[no timestamp]  Parameters: {"raw"=>"This is just a test test test", "title"=>"This is just a test test test", "unlist_topic"=>"false", "category"=>"10", "is_warning"=>"false", "archetype"=>"regular", "typing_duration_msecs"=>"200", "composer_open_duration_msecs"=>"3160", "shared_draft"=>"false", "draft_key"=>"new_topic", "activity_pub_visibility"=>"public", "nested_post"=>"true"}
Sep 25 15:06:38 - Processing by PostsController#create as JSON
Sep 25 15:06:38 - Parameters: {"raw"=>"This is just a test test test", "title"=>"This is just a test test test", "unlist_topic"=>"false", "category"=>"10", "is_warning"=>"false", "archetype"=>"regular", "typing_duration_msecs"=>"200", "composer_open_duration_msecs"=>"3160", "shared_draft"=>"false", "draft_key"=>"new_topic", "activity_pub_visibility"=>"public", "nested_post"=>"true"}
Sep 25 15:06:38 - 172.18.0.1 - - [25/Sep/2024:13:06:38 +0000] "POST /message-bus/3e2e0add2e9a41cc9ce7041980fe4f81/poll HTTP/1.1" 200 2438 "https://community.tuist.io/c/announcements/10" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:130.0) Gecko/20100101 Firefox/130.0"
Sep 25 15:06:38 - 172.18.0.1 - - [25/Sep/2024:13:06:38 +0000] "POST /message-bus/3e2e0add2e9a41cc9ce7041980fe4f81/poll HTTP/1.1" 200 115 "https://community.tuist.io/c/announcements/10" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:130.0) Gecko/20100101 Firefox/130.0"
[no timestamp]  2024-09-25T13:06:38Z cloudron 37a832f8-20ab-41d7-9d4d-82052354c0eb 1101 37a832f8-20ab-41d7-9d4d-82052354c0eb - 172.18.0.1 - - [25/Sep/2024:13:06:38 +0000] "POST /message-bus/3e2e0add2e9a41cc9ce7041980fe4f81/poll HTTP/1.1" 200 115 "https://community.tuist.io/c/announcements/10" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:130.0) Gecko/20100101 Firefox/130.0"
[no timestamp]  start
Sep 25 15:06:39 - start
[no timestamp]  start
Sep 25 15:06:39 - start
[no timestamp]  done
Sep 25 15:06:39 - done
[no timestamp]  start
Sep 25 15:06:39 - start
[no timestamp]  start
[no timestamp]  start
Sep 25 15:06:39 - start
Sep 25 15:06:39 - start
[no timestamp]  done
Sep 25 15:06:39 - done
[no timestamp]  done
Sep 25 15:06:39 - done
[no timestamp]  500 Internal Server Error in 476ms (ActiveRecord: 0.0ms | Allocations: 56364)
[no timestamp]  done
Sep 25 15:06:39 - Completed 500 Internal Server Error in 476ms (ActiveRecord: 0.0ms | Allocations: 56364)
Sep 25 15:06:39 - done
Sep 25 15:06:39 - 172.18.0.1 - - [25/Sep/2024:13:06:39 +0000] "POST /posts HTTP/1.1" 500 46 "https://community.tuist.io/c/announcements/10" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:130.0) Gecko/20100101 Firefox/130.0"
[no timestamp]  start
Sep 25 15:06:39 - start
[no timestamp]  done
Sep 25 15:06:39 - done
[no timestamp]  done
Sep 25 15:06:39 - done

この問題のデバッグのための推奨されるパスは何ですか?

次のステップは、フォーラムの /logs に移動し、対応するログ行を見つけて、スタックトレースをここに投稿することです。

「いいね!」 3

エラーは次のとおりです。

Message

NoMethodError (undefined method `moderating_groups' for #<Category id: 10, name: "Announcements", color: "652D90", topic_id: 55, topic_count: 5, created_at: "2024-09-25 09:23:28.181772000 +0000", updated_at: "2024-09-27 11:53:47.131692000 +0000", user_id: 3, topics_year: 4, topics_month: 4, topics_week: 4, slug: "announcements", description: "This category is used for announcements by the mai...", text_color: "FFFFFF", read_restricted: false, auto_close_hours: nil, post_count: 4, latest_post_id: 108, latest_topic_id: 83, position: 7, parent_category_id: nil, posts_year: 4, posts_month: 4, posts_week: 4, email_in: nil, email_in_allow_strangers: false, topics_day: 0, posts_day: 0, allow_badges: true, name_lower: "announcements", auto_close_based_on_last_post: false, topic_template: nil, contains_messages: nil, sort_order: nil, sort_ascending: nil, uploaded_logo_id: nil, uploaded_background_id: nil, topic_featured_link_allowed: true, all_topics_wiki: false, show_subcategory_list: false, num_featured_topics: 3, default_view: nil, subcategory_list_style: "rows_with_featured_topics", default_top_period: "all", mailinglist_mirror: false, minimum_required_tags: 0, navigate_to_first_post_after_read: false, search_priority: 0, allow_global_tags: false, reviewable_by_group_id: nil, read_only_banner: nil, default_list_filter: "all", allow_unlimited_owner_edits_on_first_post: false, default_slow_mode_seconds: nil, uploaded_logo_dark_id: nil, uploaded_background_dark_id: nil>)
lib/plugin/instance.rb:376:in `public_send'
lib/plugin/instance.rb:376:in `block (2 levels) in add_to_class'
lib/plugin/instance.rb:376:in `public_send'
lib/plugin/instance.rb:376:in `block (2 levels) in add_to_class'
lib/plugin/instance.rb:376:in `public_send'
lib/plugin/instance.rb:376:in `block (2 levels) in add_to_class'
lib/plugin/instance.rb:376:in `public_send'
lib/plugin/instance.rb:376:in `block (2 levels) in add_to_class'
lib/plugin/instance.rb:576:in `block in on'
lib/discourse_event.rb:12:in `bl...

Backtrace

activemodel (7.1.3.4) lib/active_model/attribute_methods.rb:489:in `method_missing'
plugins/discourse-activity-pub/plugin.rb:367:in `block (2 levels) in activate!'
lib/plugin/instance.rb:376:in `public_send'
lib/plugin/instance.rb:376:in `block (2 levels) in add_to_class'
plugins/discourse-activity-pub/plugin.rb:331:in `block (2 levels) in activate!'
lib/plugin/instance.rb:376:in `public_send'
lib/plugin/instance.rb:376:in `block (2 levels) in add_to_class'
plugins/discourse-activity-pub/plugin.rb:337:in `block (2 levels) in activate!'
lib/plugin/instance.rb:376:in `public_send'
lib/plugin/instance.rb:376:in `block (2 levels) in add_to_class'
plugins/discourse-activity-pub/app/models/discourse_activity_pub_object.rb:99:in `after_scheduled'
plugins/discourse-activity-pub/app/models/discourse_activity_pub_activity.rb:109:in `after_scheduled'
plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:89:in `after_scheduled'
plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:15:in `perform'
plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:27:in `perform'
plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:160:in `block in activity_pub_deliver_activity'
plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:159:in `each'
plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:159:in `activity_pub_deliver_activity'
plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:41:in `perform_activity_pub_activity'
plugins/discourse-activity-pub/plugin.rb:455:in `block (2 levels) in activate!'
lib/plugin/instance.rb:376:in `public_send'
lib/plugin/instance.rb:376:in `block (2 levels) in add_to_class'
plugins/discourse-activity-pub/plugin.rb:661:in `block (2 levels) in activate!'
lib/plugin/instance.rb:576:in `block in on'
lib/discourse_event.rb:12:in `block in trigger'
/home/cloudron/rbenv/versions/3.2.2/lib/ruby/3.2.0/set.rb:511:in `each_key'
/home/cloudron/rbenv/versions/3.2.2/lib/ruby/3.2.0/set.rb:511:in `each'
lib/discourse_event.rb:12:in `trigger'
lib/post_creator.rb:258:in `trigger_after_events'
lib/post_creator.rb:220:in `create'
lib/new_post_manager.rb:318:in `perform_create_post'
lib/new_post_manager.rb:252:in `perform'
app/controllers/posts_controller.rb:215:in `create'
actionpack (7.1.3.4) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (7.1.3.4) lib/abstract_controller/base.rb:224:in `process_action'
actionpack (7.1.3.4) lib/action_controller/metal/rendering.rb:165:in `process_action'
actionpack (7.1.3.4) lib/abstract_controller/callbacks.rb:259:in `block in process_action'
activesupport (7.1.3.4) lib/active_support/callbacks.rb:121:in `block in run_callbacks'
app/controllers/application_controller.rb:424:in `block in with_resolved_locale'
i18n (1.14.5) lib/i18n.rb:351:in `with_locale'
app/controllers/application_controller.rb:424:in `with_resolved_locale'
activesupport (7.1.3.4) lib/active_support/callbacks.rb:130:in `block in run_callbacks'
activesupport (7.1.3.4) lib/active_support/callbacks.rb:141:in `run_callbacks'
actionpack (7.1.3.4) lib/abstract_controller/callbacks.rb:258:in `process_action'
actionpack (7.1.3.4) lib/action_controller/metal/rescue.rb:25:in `process_action'
actionpack (7.1.3.4) lib/action_controller/metal/instrumentation.rb:74:in `block in process_action'
activesupport (7.1.3.4) lib/active_support/notifications.rb:206:in `block in instrument'
activesupport (7.1.3.4) lib/active_support/notifications/instrumenter.rb:58:in `instrument'
activesupport (7.1.3.4) lib/active_support/notifications.rb:206:in `instrument'
actionpack (7.1.3.4) lib/action_controller/metal/instrumentation.rb:73:in `process_action'
actionpack (7.1.3.4) lib/action_controller/metal/params_wrapper.rb:261:in `process_action'
activerecord (7.1.3.4) lib/active_record/railties/controller_runtime.rb:32:in `process_action'
actionpack (7.1.3.4) lib/abstract_controller/base.rb:160:in `process'
actionview (7.1.3.4) lib/action_view/rendering.rb:40:in `process'
rack-mini-profiler (3.3.1) lib/mini_profiler/profiling_methods.rb:89:in `block in profile_method'
actionpack (7.1.3.4) lib/action_controller/metal.rb:227:in `dispatch'
actionpack (7.1.3.4) lib/action_controller/metal.rb:309:in `dispatch'
actionpack (7.1.3.4) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
actionpack (7.1.3.4) lib/action_dispatch/routing/route_set.rb:32:in `serve'
actionpack (7.1.3.4) lib/action_dispatch/journey/router.rb:51:in `block in serve'
actionpack (7.1.3.4) lib/action_dispatch/journey/router.rb:131:in `block in find_routes'
actionpack (7.1.3.4) lib/action_dispatch/journey/router.rb:124:in `each'
actionpack (7.1.3.4) lib/action_dispatch/journey/router.rb:124:in `find_routes'
actionpack (7.1.3.4) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (7.1.3.4) lib/action_dispatch/routing/route_set.rb:882:in `call'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
rack (2.2.9) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.9) lib/rack/conditional_get.rb:40:in `call'
rack (2.2.9) lib/rack/head.rb:12:in `call'
actionpack (7.1.3.4) lib/action_dispatch/http/permissions_policy.rb:36:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:393:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:14:in `call'
rack (2.2.9) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.9) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (7.1.3.4) lib/action_dispatch/middleware/cookies.rb:689:in `call'
actionpack (7.1.3.4) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (7.1.3.4) lib/active_support/callbacks.rb:101:in `run_callbacks'
actionpack (7.1.3.4) lib/action_dispatch/middleware/callbacks.rb:28:in `call'
actionpack (7.1.3.4) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
actionpack (7.1.3.4) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
logster (2.20.0) lib/logster/middleware/reporter.rb:40:in `call'
lib/freedom_patches/rails_rack_logger_from_rails_7_2.rb:35:in `call_app'
lib/freedom_patches/rails_rack_logger_from_rails_7_2.rb:22:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
actionpack (7.1.3.4) lib/action_dispatch/middleware/request_id.rb:28:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
rack (2.2.9) lib/rack/method_override.rb:24:in `call'
actionpack (7.1.3.4) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (7.1.3.4) lib/action_dispatch/middleware/static.rb:25:in `call'
rack (2.2.9) lib/rack/sendfile.rb:110:in `call'
rack-mini-profiler (3.3.1) lib/mini_profiler.rb:191:in `call'
message_bus (4.3.8) lib/message_bus/rack/middleware.rb:60:in `call'
lib/middleware/request_tracker.rb:360:in `call'
actionpack (7.1.3.4) lib/action_dispatch/middleware/remote_ip.rb:92:in `call'
railties (7.1.3.4) lib/rails/engine.rb:536:in `call'
railties (7.1.3.4) lib/rails/railtie.rb:226:in `public_send'
railties (7.1.3.4) lib/rails/railtie.rb:226:in `method_missing'
rack (2.2.9) lib/rack/urlmap.rb:74:in `block in call'
rack (2.2.9) lib/rack/urlmap.rb:58:in `each'
rack (2.2.9) lib/rack/urlmap.rb:58:in `call'
unicorn (6.1.0) lib/unicorn/http_server.rb:634:in `process_client'
unicorn (6.1.0) lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn (6.1.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn (6.1.0) lib/unicorn/http_ser

Env

HTTP HOSTS: community.tuist.io

こんにちは、lemmy.dbzer0.com の管理者です。Lemmy と Discourse の間のインタラクションがもっと活発になることを願っています。Discourse と Mastodon の組み合わせよりも、この二つの方がはるかに自然に連携できると感じています。

主に、Lemmy ユーザーが、Discourse フォーラムごとに新しいアカウントを作成することなく、トピックを表示したり、やり取りしたりできる方法に関心があります。

私の理解では、最大の課題は、apub プラグインが Discourse カテゴリを apub グループとして表現していないため、Lemmy がそれらを見ることができないということですよね?

いずれにしても、Lemmy インスタンスと管理者へのアクセスが必要な場合は、テストのために提供できます。私の Lemmy アカウントはこちらです: https://lemmy.dbzer0.com/u/db0

「いいね!」 5

皆さん、こんにちは。来年3月まで、このプラグインのサポートを通常通り提供します。このプラグインを使用していて、何らかの点で苦労している場合は、お知らせください。できるだけ多くの未解決の質問に回答します。

Discourseのすべてのユーザーはアクターに含まれています。Discourseでのフォロープロセスは、Lemmyでのプロセスと同じであり、FEP-1b12でさらに詳しく説明されています。Discourseアクターをまだフォローできない理由(つまり、カテゴリのフォローが主な焦点となっていること)は、フォーラムは本質的にトピック中心であり、複数のユーザーが関与するディスカッションであるためです。実際、これは他のフォーラムスタイルのActivityPubアプリケーションで採用されているアプローチであり、W3Cフォーラムおよびスレッドディスカッションタスクフォース(NodeBBおよび同様のソフトウェアと協力して)で取り組んできたことです。

あなたが説明しているのは、「最初の投稿のみ」と「完全なトピック」のフェデレーションの違いです。「完全なトピック」フェデレーションがどのように機能するかは、あなたが期待しているものです。ドキュメントと説明ビデオについては、こちらをご覧ください。

このエラーは、最新バージョンのDiscourseを実行していないことを意味します。ActivityPubプラグインは現在、動作するために最新バージョンのDiscourseを必要とします。

いいえ、ActivityPubプラグインは、Lemmyの作成者であるNutomicがグループベースのフェデレーションを説明するために書いたFEP-1b12に完全に準拠しています。LemmyとDiscourseの間でフェデレーションを試しましたか?

「いいね!」 2

私のドメインが正しく表示されず、メタからのコンテンツが一切表示されない問題を調査していただけますか?

「いいね!」 1

テストできるこのプラグインを備えたDiscourseサーバーはありますか?このフォーラムはそれを使用していないと仮定してよいですか?

「いいね!」 1

Metaはactivitypubを使用しています。例えば、このトピックはフェデレーションされていませんでした。

そして、こちらはフェデレーションされていました。

この情報はどこで見られますか?また、2番目のリンクは利用できません。

そのページのURL(AP URIではなく)は以下のとおりです。

APアイコンをクリックすると、AP情報を確認できます。

「いいね!」 1

Apub のトピックが一つも見つからず困っています。ほとんどの場合、アイコンが存在しません。

もし存在したとしても、無効になっています。

それにもかかわらず、あなたが投稿したリンクをたどり、lemmy で URL を検索しました(これは、以前購読していなかったリンクを取得する方法です)が、見つかりません。また、購読できるようにアナウンスフォーラムを全く見つけることができません。

「いいね!」 1

承知しました。announcements@meta.discourse.orgで検索して購読することができました。他のトピックもいくつか購読して、lemmyで新しい投稿が見られるか試してみます。

編集:FeatureやAnnouncementsのようなコミュニティは見つけられましたが、Support、Plugin、Bugは見つけられませんでした。https://lemmy.dbzer0.com/search?q=!plugin%40meta.discourse.org&type=Communities&listingType=All&page=1&sort=TopAll

「いいね!」 2

それらはアクターを持っていないからです。ドキュメントと説明ビデオをご覧ください。各カテゴリにアクターを割り当てる前に、それを見つけることはできないことがわかります。

メタでは、アクターが作成されたのは AnnouncementsFeature だけだと思います。

「いいね!」 4

しかし、私は外部インスタンスであり、あなたからフェデレーションコンテンツを取得しようとしています。私にはそれは見えませんか?

編集:ああ、フェデレーションタブが見えました。しかし、それは時々だけです。他の時は表示されません。

「いいね!」 2

はい、それはすぐに修正されます。表示されない場合は、ページを更新すると表示されます。結果をお知らせください。

@mcdanlj と私でこの件についてプライベートに話し合っていることをお知らせします。これはおそらく過去の問題(つまり、Michael が早期採用者であったため)です。

「いいね!」 4

はい、2つの質問があります。

  1. New and improved About page at /about is live - Announcements - Discourse Meta のような既存のフェデレーションスレッドが見つからない件についてはどうなりますか?lemmy で検索してみましたが、表示されませんでした。
  2. トピック内のスレッドの一部はフェデレーションされているのに、他はそうではないのはなぜですか?どうすればわかりますか?

いずれにしても、Following an ActivityPub Actor も、lemmy 関連の情報で更新できるかもしれませんか?

「いいね!」 1

Lemmy開発者と Lemmy - SocialHub@angus の両方に尋ねると、より連携が取りやすくなるかもしれません。Lemmy との相互運用性は素晴らしいでしょう:tada:


@angus最近のMastodonのブログ記事には、実装する価値のあるものがあります。例えば、ユーザーのプロフィールで注目のトピックがそのユーザーによって開始された場合などです。

新しい種類のOpenGraphタグを作成することにしました。これは、ウェブサイトで、Discord、iMessage、またはMastodonで共有されたときにページのプレビューに表示されるサムネイル画像を決定するために使用するタグと同じ種類です。次のようになります: <meta name="fediverse:creator" content="@Gargron@mastodon.social" />

メタタグはトピックに表示され、Mastodonはユーザーのプロフィールにリンクできるようになります。Discourseにはユーザーアクターがいないことは承知していますが、ActivityPubアクターが例えば出版社であり、トピックがそのカタログに関するものであれば、ユースケースは理にかなっています。 :wink:

「いいね!」 1

はい、@hellekin が提案するように、Lemmy / Discourse のより詳細な議論はここで扱うのが最善だと思います。

このプラグインの作業を再開するため、Lemmy に関する詳細な質問はそちらに投稿してください。すぐにフォローアップします。

ありがとうございます。検討します。

Discourse にはユーザーアクターが存在します。現在、フォローできないだけです。この誤解が今日すでに 3 回も出てきているため、UI のどこかに表示することを考えています。「ユーザーアクターをフォローできないのはなぜですか?」というフォローアップの質問に対しては、「Discourse でユーザーアクターをフォローしたいのはなぜですか?」という以前の質問にまず答える必要があります(つまり、実際のユースケースは何ですか?)。

Discourse Follow が存在することは認識しています。私が構築したものです。ただし、インスタンス内で通知/発見目的でユーザーをフォローすることと、Fediverse でユーザーアクターをフォローすることの間には違いがあります。)

「いいね!」 4

これはマージされれば修正されます。

また、Lemmy と Discourse の連携方法についての「ハウツー」トピックをメタに、インストラクションビデオとともに近日中に公開する予定です。Lemmy を使用して Discourse と連携している、または連携したい場合は、ここにあなたの考えや経験を共有してください。そうすれば、指示の中でそれらに確実に対処します。

「いいね!」 2

おお、ちょうど良い変更が適用されました。

:tada:

「いいね!」 3