angus
(Angus McLeod)
22
@hellekin レポートありがとうございます。ActivityPubサービスでは、Fediverseのアクターは常に増減しているため、一定量の失敗したリクエストは常に発生します。例えば、以下のような状況のようです。
- 最初のログにあるURL
https://activitypub.example は実際のURLではありません(変更しましたか?)
- 2番目のログにあるユーザー
https://mas.to/users/rikvipcode はもう存在しません
- 3番目のログにあるユーザー
https://mastodon.social/users/ejovoni46709 はもう存在しません
ログの冗長性はデバッグに役立ちますが、ログが煩雑になる場合は、サイト設定 activity pub verbose logging を使用して切り替えることができます。デフォルトはオフです。
必要であれば、フェーズ2でエラーハンドリングの改善を検討しますが、これまでのところ、投稿されたスニペットは想定通り、つまりアクターがFediverseに存在しないという状況のようです。
現在、プラグインが配信の失敗を処理する方法は、Mastodonと同じように追跡することです。つまり、エンドポイントへの配信に7日間失敗した場合、「利用不可」とマークされ、リクエストは試行されなくなります。
「いいね!」 3
はい、その前の行で示されているとおりです。
確かに、しかしステータスコードは 410 です。これは、アカウントが移動した可能性があることを意味します(Tombstone がある場合 — この条件はチェックされていますか?)
「いいね!」 1
Jagster
(Jakke Lehtonen)
24
いいえ。エラー410 Goneは、リソースが削除されたことを意味します。今、何を見逃していますか?
「いいね!」 1
gme
(George Ellenburg)
29
こんにちは @angus さん、
https://federation.cafe で、あなたの AP プラグインを使って、まっさらなセルフホスト型の Discourse をセットアップしたばかりなのですが、Discourse のエラーログに 403 エラーが表示されています(投稿が共有されていません)。
ハイフンが原因の可能性があると思われますか?
[Discourse Activity Pub] GET request to https://bofh.social/internal/fetch failed: Expected([200, 201, 202, 301, 302, 307, 308]) <=> Actual(403 Forbidden)
…
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/request.rb:66:in `rescue in perform'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/request.rb:50:in `perform'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/request.rb:34:in `get_json_ld'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/request.rb:106:in `get_json_ld'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/json_ld.rb:52:in `request_object'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/json_ld.rb:48:in `resolve_object'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/actor.rb:103:in `resolve_and_store'
/var/www/discourse/plugins/discourse-activity-pub/app/controllers/concerns/discourse_activity_pub/signature_verification.rb:192:in `actor_from_key_id'
/var/www/discourse/plugins/discourse-activity-pub/app/controllers/concerns/discourse_activity_pub/signature_verification.rb:57:in `signed_request_actor'
/var/www/discourse/plugins/discourse-activity-pub/app/controllers/concerns/discourse_activity_pub/signature_verification.rb:27:in `ensure_verified_signature'
activesupport-7.0.4.3/lib/active_support/callbacks.rb:400:in `block in make_lambda'
activesupport-7.0.4.3/lib/active_support/callbacks.rb:180:in `block (2 levels) in halting_and_conditional'
actionpack-7.0.4.3/lib/abstract_controller/callbacks.rb:34:in `block (2 levels) in <module:Callbacks>'
activesupport-7.0.4.3/lib/active_support/callbacks.rb:181:in `block in halting_and_conditional'
activesupport-7.0.4.3/lib/active_support/callbacks.rb:595:in `block in invoke_before'
activesupport-7.0.4.3/lib/active_support/callbacks.rb:595:in `each'
activesupport-7.0.4.3/lib/active_support/callbacks.rb:595:in `invoke_before'
activesupport-7.0.4.3/lib/active_support/callbacks.rb:116:in `block in run_callbacks'
/var/www/discourse/app/controllers/application_controller.rb:418:in `block in with_resolved_locale'
i18n-1.14.1/lib/i18n.rb:322:in `with_locale'
/var/www/discourse/app/controllers/application_controller.rb:418:in `with_resolved_locale'
activesupport-7.0.4.3/lib/active_support/callbacks.rb:127:in `block in run_callbacks'
activesupport-7.0.4.3/lib/active_support/callbacks.rb:138:in `run_callbacks'
actionpack-7.0.4.3/lib/abstract_controller/callbacks.rb:233:in `process_action'
actionpack-7.0.4.3/lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack-7.0.4.3/lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'
activesupport-7.0.4.3/lib/active_support/notifications.rb:206:in `block in instrument'
activesupport-7.0.4.3/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport-7.0.4.3/lib/active_support/notifications.rb:206:in `instrument'
actionpack-7.0.4.3/lib/action_controller/metal/instrumentation.rb:66:in `process_action'
actionpack-7.0.4.3/lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
activerecord-7.0.4.3/lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack-7.0.4.3/lib/abstract_controller/base.rb:151:in `process'
actionview-7.0.4.3/lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler-3.1.0/lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
actionpack-7.0.4.3/lib/action_controller/metal.rb:188:in `dispatch'
actionpack-7.0.4.3/lib/action_controller/metal.rb:251:in `dispatch'
actionpack-7.0.4.3/lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
actionpack-7.0.4.3/lib/action_dispatch/routing/route_set.rb:32:in `serve'
actionpack-7.0.4.3/lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack-7.0.4.3/lib/action_dispatch/journey/router.rb:32:in `each'
actionpack-7.0.4.3/lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack-7.0.4.3/lib/action_dispatch/routing/route_set.rb:852:in `call'
railties-7.0.4.3/lib/rails/engine.rb:530:in `call'
railties-7.0.4.3/lib/rails/railtie.rb:226:in `public_send'
railties-7.0.4.3/lib/rails/railtie.rb:226:in `method_missing'
actionpack-7.0.4.3/lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
actionpack-7.0.4.3/lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack-7.0.4.3/lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack-7.0.4.3/lib/action_dispatch/journey/router.rb:32:in `each'
actionpack-7.0.4.3/lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack-7.0.4.3/lib/action_dispatch/routing/route_set.rb:852:in `call'
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
rack-2.2.7/lib/rack/tempfile_reaper.rb:15:in `call'
rack-2.2.7/lib/rack/conditional_get.rb:27:in `call'
rack-2.2.7/lib/rack/head.rb:12:in `call'
actionpack-7.0.4.3/lib/action_dispatch/http/permissions_policy.rb:38:in `call'
/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'
/var/www/discourse/lib/middleware/anonymous_cache.rb:367:in `call'
rack-2.2.7/lib/rack/session/abstract/id.rb:266:in `context'
rack-2.2.7/lib/rack/session/abstract/id.rb:260:in `call'
actionpack-7.0.4.3/lib/action_dispatch/middleware/cookies.rb:704:in `call'
actionpack-7.0.4.3/lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport-7.0.4.3/lib/active_support/callbacks.rb:99:in `run_callbacks'
actionpack-7.0.4.3/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack-7.0.4.3/lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'
actionpack-7.0.4.3/lib/action_dispatch/middleware/show_exceptions.rb:26:in `call'
logster-2.12.2/lib/logster/middleware/reporter.rb:43:in `call'
railties-7.0.4.3/lib/rails/rack/logger.rb:40:in `call_app'
railties-7.0.4.3/lib/rails/rack/logger.rb:27:in `call'
/var/www/discourse/config/initializers/100-quiet_logger.rb:20:in `call'
/var/www/discourse/config/initializers/100-silence_logger.rb:29:in `call'
actionpack-7.0.4.3/lib/action_dispatch/middleware/remote_ip.rb:93:in `call'
actionpack-7.0.4.3/lib/action_dispatch/middleware/request_id.rb:26:in `call'
/var/www/discourse/lib/middleware/enforce_hostname.rb:24:in `call'
rack-2.2.7/lib/rack/method_override.rb:24:in `call'
actionpack-7.0.4.3/lib/action_dispatch/middleware/executor.rb:14:in `call'
rack-2.2.7/lib/rack/sendfile.rb:110:in `call'
actionpack-7.0.4.3/lib/action_dispatch/middleware/host_authorization.rb:131:in `call'
rack-mini-profiler-3.1.0/lib/mini_profiler.rb:260:in `call'
message_bus-4.3.2/lib/message_bus/rack/middleware.rb:60:in `call'
/var/www/discourse/lib/middleware/request_tracker.rb:228:in `call'
railties-7.0.4.3/lib/rails/engine.rb:530:in `call'
railties-7.0.4.3/lib/rails/railtie.rb:226:in `public_send'
railties-7.0.4.3/lib/rails/railtie.rb:226:in `method_missing'
rack-2.2.7/lib/rack/urlmap.rb:74:in `block in call'
rack-2.2.7/lib/rack/urlmap.rb:58:in `each'
rack-2.2.7/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_server.rb:143:in `start'
unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `load'
/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `<main>'
…
hostname LILEJAP07-app
process_id 658
application_version 1abfe2e61d12b1b559aab0132ec3fb7cc8b87232
HTTP_HOST federation.cafe
REQUEST_URI /ap/actor/5ce52c043e670476a1426f9a66472c07
REQUEST_METHOD GET
HTTP_USER_AGENT Akkoma 3.8.0-0-gccae7ef; https://bofh.social <admin@bofh.social>
HTTP_ACCEPT application/activity+json
HTTP_X_FORWARDED_FOR 91.107.215.39, 172.71.250.70
HTTP_X_REAL_IP 172.71.250.70
time 2:16 pm
何か考えはありますか?
bmann
(Boris Mann)
30
フルレングスの投稿にも興味があります。その場合、「ノート」ではなく「記事」タイプを使用する必要があります。
実際、アナウンスよりもフェデレーテッドフォーラム機能の方が私にとって興味深いものです。
このような機能のロードマップや寄付先はありますか?
angus
(Angus McLeod)
31
@gme さん、プラグインをお試しいただきありがとうございます。
まず、いくつか注意点があります。
-
MVP プラグインは Mastodon に対してテストされています。ここでは Pleroma を使用しているようですね。Pleroma は ActivityPub に準拠しており、Mastodon と連携することも知っていますが、サポートを確実にするためにどのような調整が必要か(もしあれば)を詳しく調べることはまだできていません。しかし、何が起こっているのか興味深く見ています。
-
リクエストは、Pleroma サーバーでの認証エラーが原因で失敗したようです(403 エラーはそういう意味です)。認証されていない cURL リクエストでそのエンドポイントを取得できるため、Pleroma 側で HTTP 認証が失敗している可能性があります。
後者(つまり 2)をテストするために、Pleroma のログ(そちらのサーバーの管理者でもあるようですね?)を確認して、そちらで詳細を確認できるか見ていただけますか?
@bmann さん、フィードバックありがとうございます。このユースケースについて、具体的にどのようなことを想定しているか教えていただけますか?可能であれば例を挙げていただけると助かります。
このトピックが、開発状況を把握するのに最適な場所です。フェーズ 2 の計画が固まり次第、ここで共有します。それまでの間、最も役立つのは、プラグインを使用している、または使用したいと考えている具体的なユースケースを共有していただくことです。
「いいね!」 5
bmann
(Boris Mann)
32
ユースケースは、Discourse をより完全な AP ノードとして使用することです。AP にコンテンツを投稿する簡単な方法はたくさんあります (たとえば、カテゴリ RSS フィードと Zapier または Buffer を使用するなど) — しかし、より完全な AP 機能を開発するには、プラグイン/統合としてのみ行うことができます。
Article は、完全な記事を対象とした ActivityStream のタイプです。クライアントインターフェイスに応じて、プレビューが表示され、その後、インラインで記事全体を表示するためにクリックされます (コンテンツ警告に似ていますが、続きを読む)。
Note は、マイクロブログのタイプです。
完全な Article 投稿を持つことで、人々は AP クライアントで直接読んだり、ブーストしたり、返信したりできます。
そしてもちろん、Reddit の最近のニュースを考えると、よりマイクロブログ的な AP インスタンスをフォローするのか、Lemmy や Kbin のようなフェデレーテッドフォーラムの方向性に行くのか、あなたのロードマップについて聞くのは興味深いでしょう。
「いいね!」 1
@angus、@pmusaraj、NGI Sargasso の公募を見ましたか?かなり急な通知ですが、このプラグインの開発をさらに進めるのに役立つかもしれません(すでに他の計画がある場合を除く)。
「いいね!」 1
angus
(Angus McLeod)
34
皆さん、このプラグインの第2フェーズの作業が承認されたことをお知らせできて嬉しく思います。これは、約3.5ヶ月後のリリースを目指して、すでに作業を開始しているものです。
公開後のノートの編集をサポート
ノートの復元をサポート
公開投稿とフォロワー限定投稿の両方をサポート
ノートコンテンツの解析を改善
- 特殊文字を処理する(別のパーサーを使用するかもしれません)。さらに見る。
投稿のオブジェクトとして Note の代わりに Article を使用することをサポート。
リモートで行われたノートへの返信アクティビティを受け入れ、Discourseで行われたノートへの返信アクティビティを公開することをサポート。
- Discourseで行われた返信に関するアクティビティを公開
- Discourseユーザーをアクターとして許可する
- Discourseの返信(投稿)のノートオブジェクトを作成する
- 対応する Discourse アクションの Create/Delete/Update/Undo アクティビティを公開する
- リモートで行われた返信に関するアクティビティを受け入れる
- リモートサーバーからのアクティビティのアクターを Discourse ユーザーとしてステージングする
- ノートオブジェクトから Discourse の返信(投稿)を作成する
- 対応する Discourse アクションの Create/Delete/Update/Undo アクティビティに変換する
- カテゴリ設定を追加して、最初の投稿のみ(現在)と返信アクティビティをサポートする「フルスレッド」を切り替える。
Like Activity をサポート
Discourse ユーザーが Mastodon で本人確認を行い、Toots から作成された Discourse 投稿がその Discourse ユーザーアカウントに関連付けられるようにサポートする。
- ユーザーが、アカウントが保存されている Mastodon サーバーで Mastodon OAuth Authorization フローを実行できるようにする。これは、Discourse アカウント設定から開始される。
- Discourse ユーザーの Mastodon アクセストークンを使用して、Mastodon アカウントの AP ID を取得して保存し、Discourse アカウントとともに保存する。
- Discourse ユーザーの AP ID を持つアクターからの AP アクティビティに関連付けられたすべての Discourse アクティビティを、ユーザーが本人確認を行った前後に関わらず、その Discourse ユーザーに関連付ける。
「いいね!」 15
mcdanlj
(Michael K Johnson)
35
これは非常にエキサイティングですね。非常に高いレベルのフェデレーションとインタラクティブ性です。
中間リリースを行う予定はありますか、それとも約3.5か月後に1回の大きなリリースになりますか?
angus
(Angus McLeod)
36
中間リリースがあるかもしれませんが、現時点では何も約束できません。進捗があり次第、随時お知らせします。
「いいね!」 2
ghutchis
(Geoff Hutchison)
37
110%同意します。これには多くの素晴らしい側面が含まれています。
このフロントで、少なくとも中間リリースを行う可能性はありますか?
正直なところ、「公開投稿をデフォルトにする」中間リリースを追加するだけでも、すぐに歓迎されます。
「いいね!」 2
mcdanlj
(Michael K Johnson)
38
公開投稿は、私が信じるところでは、最初にリストされた箇条書きである編集アクションのフェデレーションに依存することに注意してください。
「いいね!」 1
angus
(Angus McLeod)
39
現段階では約束はできませんが、Update federationとAudience Targeting(公開投稿)の両方で中間アップデートが行われる可能性があります。
「いいね!」 4
mcdanlj
(Michael K Johnson)
41
それは既知の制限事項です。フェデレーション編集がサポートされるまで、プラグインはフェデレーションされたコンテンツへの編集をブロックし、これを無効にする設定はありません。
「いいね!」 2
mattdm
(Matthew Miller)
42
明確にしておきますが、_メタの投稿を編集しようとして_このエラーが発生しました。
「いいね!」 3
mcdanlj
(Michael K Johnson)
43
申し訳ありません、誤解していました。少なくとも @feature@meta.discourse.org と @announcements@meta.discourse.org はここからフェデレーションされており、この選択が私が Maker Forums でこれを有効にしなかった最大の理由です…
「いいね!」 2
angus
(Angus McLeod)
44
はい、これは私が担当したフェーズ2の最初のアイテムです。実際、すでにプルリクエストがあるので、近いうちにその点でも安心できるでしょう。
「いいね!」 2