ActivityPub 플러그인

문제가 발생했습니다. 아마도 에지 케이스일 수 있습니다. 카테고리 중 하나를 ActivityPub를 사용하도록 설정했는데, Mastodon 같은 다른 플랫폼에서는 접근할 수 없고, 카테고리에 접근하고 팔로우할 수 없기 때문에 게시물이 연동(federate)되지 않고 있습니다.

핸들에서 대문자 “E” 때문에 문제가 발생하는 것 같습니다. Events@bayofislands.community

정상적으로 작동하는 연동된 카테고리가 하나 더 있습니다. 여기에서 작동하는 모습을 볼 수 있습니다.

새로운 이벤트 카테고리를 통째로 만들지 않고 이 문제를 해결할 수 있는 제안이 있을까요? DB의 하나 이상의 레코드를 수정하여 카테고리의 사용자 이름을 업데이트할 수 있을까요?

또한 Mastodon에서 카테고리를 팔로우하기 위한 URL이 작동하지 않는 것도 확인했습니다: Log in - Mastodon Newfoundland and Labrador

리포트 감사합니다. 대문자 E를 소문자로 바꾸면 정상 작동합니다.

이 문제(대문자가 포함된 핸들)를 곧 수정하겠습니다.

1개의 좋아요

팔로워를 삭제할 수 있나요? 이제 삭제된 인스턴스에서 온 몇몇 사용자가 있는데, 정리하고 싶습니다 :smirking_face:

좋은 요청이네요. 이 부분도 곧 추가할게요.

2개의 좋아요

사실 대소문자 문제인지는 확신이 서지 않습니다. 다음 사항을 확인해 주실 수 있을까요?

  1. 최신 버전의 Discourse를 실행 중인지;
  2. 최신 버전의 ActivityPub 플러그인을 실행 중인지.
1개의 좋아요

한 가지를 깨달았습니다: ActivityPub 플러그인에 의해 생성된 사용자에게는 어떤 그룹도 할당되어 있지 않으며, 이메일도 없습니다.

ActivityPub 플러그인에 의해 생성된 사용자에게 사용자 정의 그룹을 할당할 수 있나요?

3개의 좋아요

이로 인해 카테고리가 TL0으로 설정되었을 때(모든 사용자에게 읽기 전용인 경우) AP 사용자가 해당 권한이 없어 게시할 수 없는 버그가 발생했습니다.

3개의 좋아요

여기에도 버그가 있습니다. SiteSettings.selectable_avatars_mode가 설정되어 있다면, everyone으로 설정된 경우에도 AP 사용자에게 아바타가 표시되지 않는 문제가 발생합니다.

1개의 좋아요

준비가 완료되었으며, Tag Actors가 병합된 후 검토를 기다리고 있습니다.

아직은 불가능합니다. 이들은 대기 상태(staged)의 사용자이므로 몇 가지 제한 사항이 있습니다. 아마도 조금 더 시간이 지나면 가능할 것입니다.

리포트해 주셔서 감사합니다. 곧 이 사례를 더 자세히 살펴보겠습니다. 당분간은 게시 권한을 everyone으로 설정하면 정상적으로 작동합니다.

이 리포트도 감사합니다. 이 사례도 곧 더 자세히 살펴보겠습니다.

3개의 좋아요

안녕하세요. 게시할 때 “no recipients” 문제가 발생하고 있습니다. 이 문제를 어떻게 해결할 수 있을까요?

[Discourse Activity Pub] https://meta.appinn.net/ap/actor/b04930460474d895289ae0cd3c2ae719 failed to schedule https://meta.appinn.net/ap/activity/2ad9bfcc78a9df49efa7b6e9bda454da for delivery: no recipients

로그:

Message

[Discourse Activity Pub] https://meta.appinn.net/ap/actor/b04930460474d895289ae0cd3c2ae719 failed to schedule https://meta.appinn.net/ap/activity/2ad9bfcc78a9df49efa7b6e9bda454da for delivery: no recipients

Backtrace

/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:93:in `log_failure'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:35:in `can_deliver?'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:13:in `perform'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:27:in `perform'
/var/www/discourse/plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:140:in `activity_pub_deliver_activity'
/var/www/discourse/plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:38:in `perform_activity_pub_activity'
/var/www/discourse/plugins/discourse-activity-pub/plugin.rb:478:in `block (2 levels) in activate!'
/var/www/discourse/lib/plugin/instance.rb:354:in `public_send'
/var/www/discourse/lib/plugin/instance.rb:354:in `block (2 levels) in add_to_class'
/var/www/discourse/plugins/discourse-activity-pub/plugin.rb:486:in `block (2 levels) in activate!'
/var/www/discourse/lib/plugin/instance.rb:354:in `public_send'
/var/www/discourse/lib/plugin/instance.rb:354:in `block (2 levels) in add_to_class'
/var/www/discourse/plugins/discourse-activity-pub/app/controllers/discourse_activity_pub/post_controller.rb:17:in `schedule'
actionpack-7.0.8.1/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack-7.0.8.1/lib/abstract_controller/base.rb:215:in `process_action'
actionpack-7.0.8.1/lib/action_controller/metal/rendering.rb:165:in `process_action'
actionpack-7.0.8.1/lib/abstract_controller/callbacks.rb:234:in `block in process_action'
activesupport-7.0.8.1/lib/active_support/callbacks.rb:118:in `block in run_callbacks'
/var/www/discourse/app/controllers/application_controller.rb:423:in `block in with_resolved_locale'
i18n-1.14.4/lib/i18n.rb:322:in `with_locale'
/var/www/discourse/app/controllers/application_controller.rb:423:in `with_resolved_locale'
activesupport-7.0.8.1/lib/active_support/callbacks.rb:127:in `block in run_callbacks'
activesupport-7.0.8.1/lib/active_support/callbacks.rb:138:in `run_callbacks'
actionpack-7.0.8.1/lib/abstract_controller/callbacks.rb:233:in `process_action'
actionpack-7.0.8.1/lib/action_controller/metal/rescue.rb:23:in `process_action'
actionpack-7.0.8.1/lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'
activesupport-7.0.8.1/lib/active_support/notifications.rb:206:in `block in instrument'
activesupport-7.0.8.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport-7.0.8.1/lib/active_support/notifications.rb:206:in `instrument'
actionpack-7.0.8.1/lib/action_controller/metal/instrumentation.rb:66:in `process_action'
actionpack-7.0.8.1/lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
activerecord-7.0.8.1/lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack-7.0.8.1/lib/abstract_controller/base.rb:151:in `process'
actionview-7.0.8.1/lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler-3.3.1/lib/mini_profiler/profiling_methods.rb:89:in `block in profile_method'
actionpack-7.0.8.1/lib/action_controller/metal.rb:188:in `dispatch'
actionpack-7.0.8.1/lib/action_controller/metal.rb:251:in `dispatch'
actionpack-7.0.8.1/lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
actionpack-7.0.8.1/lib/action_dispatch/routing/route_set.rb:32:in `serve'
actionpack-7.0.8.1/lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack-7.0.8.1/lib/action_dispatch/journey/router.rb:32:in `each'
actionpack-7.0.8.1/lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack-7.0.8.1/lib/action_dispatch/routing/route_set.rb:852:in `call'
railties-7.0.8.1/lib/rails/engine.rb:530:in `call'
railties-7.0.8.1/lib/rails/railtie.rb:226:in `public_send'
railties-7.0.8.1/lib/rails/railtie.rb:226:in `method_missing'
actionpack-7.0.8.1/lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
actionpack-7.0.8.1/lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack-7.0.8.1/lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack-7.0.8.1/lib/action_dispatch/journey/router.rb:32:in `each'
actionpack-7.0.8.1/lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack-7.0.8.1/lib/action_dispatch/routing/route_set.rb:852:in `call'
/var/www/discourse/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.0.8.1/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:393:in `call'
/var/www/discourse/lib/middleware/csp_script_nonce_injector.rb:12:in `call'
/var/www/discourse/config/initializers/008-rack-cors.rb:26: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.0.8.1/lib/action_dispatch/middleware/cookies.rb:704:in `call'
actionpack-7.0.8.1/lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport-7.0.8.1/lib/active_support/callbacks.rb:99:in `run_callbacks'
actionpack-7.0.8.1/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack-7.0.8.1/lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'
actionpack-7.0.8.1/lib/action_dispatch/middleware/show_exceptions.rb:29:in `call'
logster-2.19.1/lib/logster/middleware/reporter.rb:40:in `call'
railties-7.0.8.1/lib/rails/rack/logger.rb:40:in `call_app'
railties-7.0.8.1/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.8.1/lib/action_dispatch/middleware/remote_ip.rb:93:in `call'
actionpack-7.0.8.1/lib/action_dispatch/middleware/request_id.rb:26:in `call'
/var/www/discourse/lib/middleware/enforce_hostname.rb:24:in `call'
rack-2.2.9/lib/rack/method_override.rb:24:in `call'
actionpack-7.0.8.1/lib/action_dispatch/middleware/executor.rb:14:in `call'
rack-2.2.9/lib/rack/sendfile.rb:110:in `call'
actionpack-7.0.8.1/lib/action_dispatch/middleware/host_authorization.rb:131: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'
/var/www/discourse/lib/middleware/request_tracker.rb:237:in `call'
railties-7.0.8.1/lib/rails/engine.rb:530:in `call'
railties-7.0.8.1/lib/rails/railtie.rb:226:in `public_send'
railties-7.0.8.1/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_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>'

Env

HTTP HOSTS: meta.appinn.net

카테고리를 추적할 누군가(또는 어떤 ‘액터’)가 필요하다고 생각합니다. 다음을 확인해 보세요:

2개의 좋아요

하지만 mastodon.social을 통해 이 카테고리를 팔로우할 때:
[Discourse Activity Pub] https://meta.appinn.net/ap/actor/b04930460474d895289ae0cd3c2ae719/inbox로 수신된 POST 요청 실패: 401 키 https://mastodon.social/users/Cosmeticclinic#main-key에 해당하는 액터를 찾을 수 없음

이것은 버그인가요? (Invalid date)

1개의 좋아요

기능 요청: activitypub 플러그인으로 생성된 계정을 무음 처리하거나 정지할 수 있을까요?

우리 서비스 약관을 심각하게 위반한 사용자가 영구 BAN되었는데, 이 사용자가 우리와 협력하는 다른 포럼으로 이동하여 activitypub을 통해 해당 포럼의 게시글을 여전히 확인할 수 있습니다.

정지 처리를 시도했지만 작동하지 않았습니다. (HTTP 422 Unprocessable Content)

2개의 좋아요

동시에, ActivityPub를 통해 전송된 사진이 포함된 게시물이 제대로 로드되지 않는 것 같습니다

내 포럼의 예시입니다: 원본 → 전달됨

1개의 좋아요

리포트 감사드립니다. 곧 두 건 모두 자세히 살펴보겠습니다.

1개의 좋아요

정말 멋진 플러그인입니다. 또한 꽤 흥미로운 성장 단계에 있는 Fediverse의 핵심 요소이기도 하죠. 정말 놀라운 작업입니다!

가까운 미래에 서로 다른 Discourse 인스턴스 간의 비공개 카테고리 사이에 사용 가능해질 가능성이 있을까요? 이는 공개 연동(open federation)과는 꽤 다른 사용 사례임을 잘 알고 있지만, 더 비공개/폐쇄적인 환경에서 협력을 촉진하는 데 매우 유용할 수 있다고 상상할 수 있는 상황입니다.

2개의 좋아요

activitypub 플러그인을 설치했고, 관리자 설정에서 플러그인이 존재하며 활성화되어 있는 것을 확인할 수 있습니다. 하지만 카테고리 설정으로 들어가면 activitypub 섹션을 찾을 수 없습니다. 약간 특이한 점은 멀티사이트(multisite) 구성을 사용하고 있다는 것입니다. 제가 놓치고 있는 것이 무엇인지, 또는 이 문제를 해결하는 방법에 대한 조언을 부탁드립니다!

1개의 좋아요

현재 비공개 카테고리는 공개 카테고리를 팔로우할 수 있지만, 비공개 카테고리 자체는 팔로우할 수 없다는 점을 참고해 주세요. ‘비공개’ 그룹을 '팔로우’한다는 개념에는 일종의 긴장감이 있으며, 이 개념은 Fediverse 내에서 논쟁의 대상이기도 합니다. 그렇다고 해서 구현되지 않을 것은 아니지만, '곧’은 아닐 것입니다 :slight_smile:

카테고리 설정은 관리자 > 플러그인 > ActivityPub로 이동되었습니다. 곧 OP(첫 번째 게시글)의 문서를 업데이트할 예정입니다!

4개의 좋아요

아하! 위에서 그 관련 내용을 본 적이 있지만, 관리 > 플러그인으로 들어가니 상단에 메뉴가 보이지 않아서 플러그인 목록에서 ActivityPub를 클릭했는데, 결국 여기로 돌아와버렸어요. 그러다 다시 뒤로 가서 설정 링크 아래를 찾아보기도 했죠. ActivityPub 설정에서 카테고리 설정으로 가는 링크를 추가하는 등 명확하게 설명해 주시면 좋을 것 같습니다.

어쨌든 이제 작동하는 것 같네요. 감사합니다!

2개의 좋아요