ActivityPub 플러그인

네, 노트 태그가 무시된 게시물의 예시를 링크로 주실 수 있을까요? 그리고 Mastodon 또는 유사한 플랫폼에 대한 언급도 함께 부탁드립니다.

게시물이 처음 작성되었을 때 노트 태그가 어디에 적용되었는지도 알려주시면 감사하겠습니다. (편집 화면/이력에는 접근할 수 없기 때문입니다.)

또한 현재 ActivityPub 사이트 설정에서 노트의 최대 글자 수가 얼마로 설정되어 있는지도 공유해 주시면 좋겠습니다.

감사합니다!

몇 가지 더 테스트해 봤는데, [note][/note] 태그 사이에 줄바꿈이나 공백 줄을 넣으면 제대로 반영되지 않는다는 점이 예상 밖이었습니다.

제거하자 동작은 더 잘 되지만, 전체 메시지가 보기 좋지 않아 보이네요… 줄바꿈을 포함할 방법이 없나요?

업데이트 감사합니다. 다음 내용을 공유해 주실 수 있을까요?

  1. 현재 정상적으로 작동하는 예시.
  2. 정상적으로 작동하기를 기대하는 예시.
  3. 가능하면 1번의 라이브 버전 링크.

이렇게 하면 말씀하신 특정 문제를 테스트하고 확인할 수 있습니다. 같은 맥락에서 이해하고 있는지 확인하는 데 예시는 항상 도움이 됩니다.

TicketZon: concerti e mostre nel fediverso - Progetti - forum.linux.it 이 공유된 것으로 보고되고 있지만 실제로는 그렇지 않다는 것을 확인할 수 있습니다.
계정은 mastodon에 존재하며, 로그에서 드디어 여러분을 위한 내용을 찾았습니다:

[Discourse Activity Pub] https://forum.linux.it/ap/actor/fc1e23a5fc2214ab70c6c0aa1061a4f0 failed to schedule https://forum.linux.it/ap/activity/229b771ac7e5943928795da1122d847d for delivery: no recipients

/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:680:in `block (2 levels) in activate!'

/var/www/discourse/lib/plugin/instance.rb:545:in `block in on'

/var/www/discourse/lib/discourse_event.rb:12:in `block in trigger'

/usr/local/lib/ruby/3.2.0/set.rb:511:in `each_key'
/usr/local/lib/ruby/3.2.0/set.rb:511:in `each'
/var/www/discourse/lib/discourse_event.rb:12:in `trigger'

/var/www/discourse/lib/post_destroyer.rb:115:in `recover'

/var/www/discourse/app/controllers/topics_controller.rb:689:in `recover'

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'

/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:64:in `call'

rack-2.2.8.1/lib/rack/tempfile_reaper.rb:15:in `call'

rack-2.2.8.1/lib/rack/conditional_get.rb:40:in `call'

rack-2.2.8.1/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:14:in `call'

rack-2.2.8.1/lib/rack/session/abstract/id.rb:266:in `context'

rack-2.2.8.1/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.8.1/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.8.1/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:236: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.8.1/lib/rack/urlmap.rb:74:in `block in call'

rack-2.2.8.1/lib/rack/urlmap.rb:58:in `each'

rack-2.2.8.1/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>'

이 PR에서 [note][/note] 태그에 블록 지원을 추가했습니다(리뷰 및 병합이 필요합니다).

이는 다음에 설명된 접근 방식을 따르는 표준 Discourse 마크다운 블록 지원입니다.

따라서 다음과 같은 경우

[note]
First line

Second line
[/note]

Third line

Note 콘텐츠는 다음과 같이 생성됩니다.

"First line\nSecond line"

반면에 다음과 같은 경우

[note]First line

Second line[/note]

Third line

Note 콘텐츠는 다음과 같이 생성됩니다.

First line\nSecond line\nThird line

(즉, [note][/note] 태그는 무시되고 제거됩니다)

이것은 Category 액터를 팔로우하는 사람이 없다는 뜻이므로, 전달할 대상이 없다는 것입니다.

2개의 좋아요

음, 그렇다면 같은 이유로 게시물이 게시되었는지 여부가 표시되는 녹색 마커가 게시물에 있어야 하는 거 아닌가요?
지금 저는 마스토돈에서 다양한 카테고리를 모두 팔로우하고 있으며 테스트를 해보겠습니다.

확인했습니다. 작동합니다. 계정을 팔로우하는 것이 필수입니다.

1개의 좋아요

혹시 팔로워가 전혀 없는 경우에도, Mastodon에서 해당 Actor의 표현(표시)에 Category Actor의 게시물이 여전히 투트(toots)로 표시되기를 기대하고 계신 건가요? 이를 위해서는 Mastodon이 아웃박스(outbox) 가져오기 기능을 구현해야 합니다. 즉,

참고로 이 플러그인은 곧 아웃박스 가져오기 기능을 지원할 예정입니다(해당 기능은 이미 구축되어 있으며, 향후 업데이트에서 관리자용으로 공개될 것입니다). 다시 말해, 원격 Actor의 콘텐츠를 백필링(과거 데이터 보충)할 수 있게 됩니다.

3개의 좋아요

지금은 Making sure you're not a bot! 을 사용하면 정상적으로 작동합니다.

1개의 좋아요

저도 ‘The whole note not listed’ 오류가 발생하고 있습니다. 제가 뭘 잘못하고 있는 걸까요? 아래에 표시된 섹션에 @ 기호를 넣어야 하나요?

여기서 제가 뭘 잘못하고 있는지 잘 모르겠습니다.

죄송합니다만, 정확히 이해가 잘 안 됩니다. 조금 더 자세히 설명해 주시겠어요?

ActivityPub에 게시되는 항목이 없습니다.

기대하는 동작에 대해 조금 더 설명해 주실 수 있을까요? 예를 들어

  1. 내 포럼에 게시글을 작성합니다.
  2. 다음을 확인하기를 기대합니다…

글을 해당 카테고리에 올리면 ActivityPub에 게시되도록 활성화해 두었는데, 실제로는 그렇지 않더라고요. 아예 게시가 되지 않고 있습니다.

“ActivityPub”라고 하셨을 때 정확히 무엇을 의미하시나요? 어디에서 확인을 기대하고 계신 건가요? 질문이 많아 죄송합니다. 사용성 관점에서 이 문제를 끝까지 파고 싶어서, 본인 말로 설명해 주시길 요청드리는 겁니다 :slight_smile:

다른 분들이 보고한 문제와 같은 상황일 수 있습니다. 즉, 해당 카테고리를 팔로우하는 사용자가 없다는 점입니다. 팔로우하는 사람이 없으면 해당 게시물을 보낼 곳이 없으므로, 어디에도 표시되지 않습니다. 다시 말해

ActivityPub 게시는 팔로우 관계가 있어야 작동합니다. 팔로워가 없더라도 카테고리 액터는 Mastodon(또는 다른 서비스)에 표시되지만, Mastodon이 그곳에서 무엇을 표시할지는 Mastodon의 재량임을 유의하세요.

기대하시는 상황을 조금 더 자세히 설명해 주시면 큰 도움이 될 것입니다! 이 기능이 정상적으로 작동한다고 느끼신 다른 ActivityPub 서비스의 예를 들어주실 수 있을까요? 감사합니다.

작은 눈 모양의 아이콘에 줄이 그어져 있고, 이 아이콘을 클릭하면 "게시되지 않았습니다"라는 메시지가 표시됩니다.

가장 가능성 높은 이유는 해당 카테고리를 팔로우하는 사람이 아무도 없기 때문입니다. 사이트 설정에서 activity_pub_verbose_logging을 활성화하고 로그를 확인하면 다음과 같은 메시지를 볼 수 있을 것입니다.

이 문제가 몇 번이나 발생했으니, 해당 모달에 "이유"를 반드시 추가할 것입니다! Mastodon에서 카테고리를 팔로우한 후 새 주제를 생성하세요.

**수정: 아니면 해당 시나리오에서 "공개됨"으로 변경할 수도 있습니다. 실제로는 아웃박스(outbox)에 활동이 추가되거든요. 어디로 보내야 할 곳이 없어서 아무 곳에도 전송되지 않을 뿐입니다. 따라서 기술적으로는 “공개됨” 상태(즉, 아웃박스에 있음)입니다.

3개의 좋아요

지금 이 프로토콜을 구현하는 것이 좋은 시점일까요, 아니면 몇 개월 정도 기다려야 할까요? 제 커뮤니티를 페디버스(Fediverse)에 개방하고, 모든 콘텐츠를 누구나 영원히 열람할 수 있도록 아카이빙하고 싶지만, 마스토돈(Mastodon)과 렘미(Lemmy)에 대해 읽어본 결과, 새로운 법규가 계속 등장하는 상황에서 그렇게 하기는 어려울 것 같다는 생각이 듭니다.

특정 관할 지역의 법적 상황 논의는 이 주제의 범위 밖일 가능성이 높다고 생각합니다. :slight_smile:

1개의 좋아요

여기 몇 가지 업데이트를 공유합니다! ActivityPub 설정은 곧 통합된 관리 패널로 이동합니다:

다음 태그가 곧 사용 가능해질 것입니다:

NodeBB, Flarum, Lemmy 및 기타 여러 ActivityPub 플랫폼과 함께, 우리는 Fediverse에서 포럼 및 링크 공유 소프트웨어를 더 잘 정렬하기 위해 W3C 작업 그룹을 설립했습니다. 이미 우리는 ActivityPub를 통해 해당 작업을 조정하고 있습니다. 예를 들어, 다음 회의는 Discourse와 NodeBB 양쪽의 단일 주제(topic)에서 조직되고 있습니다.

6개의 좋아요