ActivityPub 플러그인

안녕하세요 :wave:
먼저, 이 프로젝트가 현실로 이루어지도록 기여해 주신 인상적인 작업에 감사드립니다. 덕분에 커뮤니티를 Discourse로 이전하기로 결정한 것에 대해 더할 나위 없이 기쁩니다.

플러그인을 인스턴스에 추가하고 액터(Actor)를 하나 설정했습니다. 그러나 액터가 연결된 카테고리에서 게시물을 작성하면 "Internal Server Error"가 발생합니다. 요청이 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의 관리자입니다. Discourse와 Mastodon보다 Lemmy와 Discourse가 훨씬 더 자연스럽게 어울리는 것 같아서, 두 플랫폼 간의 상호작용이 더 활발해지기를 바랍니다.

주요 관심사는 Lemmy 사용자들이 각 Discourse 포럼마다 새 계정을 만들지 않고도 주제를 보고 상호작용할 수 있는 방법을 찾는 것입니다.

제 이해가 맞다면 가장 큰 문제는 apub 플러그인이 Discourse의 카테고리를 apub 그룹으로 표현하지 않아서 Lemmy에서 이를 볼 수 없다는 점일 텐데요, 맞습니까?

어쨌든, Lemmy 인스턴스와 테스트를 위한 관리자에 대한 접근 권한이 필요하시다면 제가 도움을 드릴 수 있습니다. 제 Lemmy 계정은 I Challenge Thee 입니다.

5개의 좋아요

여러분, 안녕하세요. 이제 최소한 내년 3월까지 이 플러그인에 대한 정기적인 지원을 계속 제공할 예정입니다. 이 플러그인을 사용 중이시며 어떤 방식으로든 어려움을 겪고 계신다면 알려주세요! 미해결된 질문에 최대한 많이 답변드리겠습니다.

Discourse의 모든 사용자는 Actor입니다. Discourse의 팔로우 프로세스는 Lemmy와 동일하게 작동하며, FEP-1b12에 더 자세히 설명되어 있습니다. 아직 Discourse Actor를 팔로우할 수 없는 이유(즉, 카테고리를 팔로우하는 데 초점을 맞추고 있는 이유)는 포럼이 본질적으로 주제 중심(topic-centric)이기 때문이며, 이는 본질적으로 여러 사용자가 관여하는 토론을 의미합니다. 실제로 이는 다른 포럼 스타일의 ActivityPub 애플리케이션들이 채택한 접근 방식이며, NodeBB 및 유사한 소프트웨어와 함께 W3C 포럼 및 스레드 토론 태스크포스에서 우리가 작업해 온 내용이기도 합니다.

말씀하신 내용은 “First Post Only”(첫 게시물만) 연동과 “Full Topic”(전체 주제) 연동 간의 차이입니다. 여러분이 기대하는 방식은 “Full Topic” 연동이 작동하는 방식입니다. 이에 대한 문서와 설명 영상은 여기서 확인하실 수 있습니다.

이 오류는 최신 버전의 Discourse를 실행하고 있지 않다는 것을 의미합니다. ActivityPub 플러그인은 현재 작동하려면 최신 버전의 Discourse가 필요합니다.

아니요, ActivityPub 플러그인은 그룹 기반 연동을 설명하기 위해 Lemmy의 창시자인 Nutomic이 작성한 FEP-1b12를 완전히 준수합니다. Lemmy와 Discourse 간 연동을 시도해 보셨나요?

2개의 좋아요

메타에 도메인이 올바르게 표시되지 않고, 메타에서 콘텐츠가 전혀 표시되지 않는 문제를 조사해 보실 수 있을까요?

1개의 좋아요

이 플러그인이 설치된 discourse 서버 중 테스트할 수 있는 것이 있을까요? 이 포럼은 해당 플러그인을 사용하지 않는 것으로 알고 있습니다, 맞죠?

1개의 좋아요

Meta는 ActivityPub를 사용합니다. 예를 들어, 이 토픽은 연동되지 않았습니다:

그리고 이것은 연동되었습니다:

이 정보를 어디서 볼 수 있나요? 또한 두 번째 링크는 제게 열리지 않습니다.

해당 페이지의 URL(AP uri가 아닌)은 다음과 같습니다.

AP 아이콘을 클릭하면 AP 정보를 확인할 수 있습니다.

1개의 좋아요

Apub 토픽을 하나라도 찾기가 어렵습니다. 대부분 아이콘이 존재하지 않습니다.

아이콘이 존재하더라도 비활성화되어 있습니다.

그럼에도 불구하고, 게시하신 링크를 따라가서 lemmy에서 해당 URL을 검색해 보았습니다(이전에는 구독하지 않았던 링크를 가져오는 방법입니다) 하지만 찾을 수 없습니다. 또한 구독할 수 있는 공지사항 포럼도 전혀 찾을 수 없습니다.

1개의 좋아요

좋아요, announcements@meta.discourse.org로 검색해서 찾았고 구독했습니다. 이제 몇 가지 다른 주제도 구독해서 lemmy에서 새 게시물을 볼 수 있는지 확인해 볼 생각입니다.

수정: Feature와 Announcements 커뮤니티는 찾을 수 있지만, Support, Plugin, Bug 커뮤니티는 찾을 수 없습니다. I Challenge Thee

2개의 좋아요

그 이유는 Actor가 없기 때문입니다. 문서와 튜토리얼 영상을 확인해 보세요. 각 Category에는 검색 가능하도록 하려면 Actor가 먼저 지정되어야 한다는 것을 알게 될 것입니다.

meta에서는 #announcements와 Contribute > Feature 채널에만 Actor가 생성된 것으로 보입니다.

4개의 좋아요

하지만 저는 외부 인스턴스로서 당신에게서 연동(federated) 콘텐츠를 가져오려 하고 있습니다. 그걸 볼 수 있는 권한이 있을까요?

수정: 아, 이제 연동 탭을 확인했습니다. 하지만 가끔만 보입니다. 다른 때는 나타나지 않아요

2개의 좋아요

네, 곧 해결될 예정입니다. 탭이 보이지 않는다면 페이지를 새로고침하면 나타날 것입니다. 진행 상황 알려주세요.

@mcdanlj 님과 저는 이 문제를 비공개로 논의 중입니다. 과거의 문제일 가능성이 높습니다(즉, 마이클이 초기 도입자였기 때문).

4개의 좋아요

네, 두 가지 질문이 있습니다:

  1. 기존에 연동된(federated) 스레드를 찾을 수 없는 건 어떻게 되나요? 예를 들어 https://meta.discourse.org/ap/object/235d597a789c305cef86318ef84d8762 같은 경우입니다. Lemmy에서 검색해 봤는데 나타나지 않아요.
  2. 왜 같은 토픽 안에서도 일부 스레드는 연동되고, 일부는 안 되는 건가요? 어떻게 구별할 수 있나요?

아무튼, Lemmy 관련 정보를 추가하기 위해 Following an ActivityPub Actor 이 스레드도 업데이트하면 좋을까요?

1개의 좋아요

Lemmy 개발자들과 @angus에게 Lemmy - SocialHub 에 함께 질문을 던져서 더 잘 조율할 수 있도록 하면 좋겠습니다. Lemmy와의 상호운용성은 정말 훌륭할 것입니다 :tada:


@angus 님, 최근의 Mastodon 블로그 게시물에서 구현할 가치가 있는 부분이 있습니다. 예를 들어, 사용자가 시작하는 주제인 경우 사용자 프로필의 '추천 주제’에 적용할 수 있습니다:

Discord, iMessage 또는 Mastodon에서 페이지를 공유할 때 미리보기에 어떤 썸네일 이미지가 표시될지 결정하는 웹사이트에 있는 태그와 동일한 종류의 OpenGraph 태그를 만들기로 결정했습니다. 다음과 같은 형태를 띱니다: <meta name="fediverse:creator" content="@Gargron@mastodon.social" />.

이 메타 태그는 주제(topic)에 표시되어 Mastodon이 사용자 프로필로 링크를 걸 수 있게 합니다. Discourse에는 사용자 액터가 없다는 것을 알고 있지만, ActivityPub 액터가 출판사이고 주제가 그들의 카탈로그에 관한 것이라면, 이 사용 사례는 의미가 있습니다. :wink:

2개의 좋아요

네, @hellekin 님이 제안하신 대로, 더 심도 있는 Lemmy / Discourse 토론은 여기서 다루는 것이 가장 적절할 것 같습니다.

이 플러그인 개발을 재개하는 중이므로, 더 자세한 Lemmy 관련 질문은 위 링크에 게시해 주시면 곧 후속 조치를 취하겠습니다.

감사합니다. 한번 생각해 보겠습니다.

Discourse에는 사용자 액터(User Actors)가 존재합니다. 다만 (현재로서는) 팔로우할 수 없을 뿐입니다. 이 오해가 오늘만 벌써 세 번이나 발생했기 때문에, UI 어딘가에 이 내용을 노출하는 방안을 고려하고 있습니다. "존재한다면 왜 사용자 액터를 팔로우할 수 없나요?"라는 후속 질문에 답하기 위해서는, 먼저 "Discourse에서 왜 사용자 액터를 팔로우하고 싶나요?"라는 전제 질문(즉, 실제 사용 사례는 무엇인가)에 답해야 합니다.

(Discourse Follow가 존재한다는 것은 알고 있습니다 - 제가 만들었거든요 - 하지만 인스턴스 내에서 알림/발견 목적으로 사용자를 팔로우하는 것과 페디버스(Fediverse)에서 사용자 액터를 팔로우하는 것에는 차이가 있습니다.)

4개의 좋아요

이것이 병합되면 수정될 것입니다.

곧 메타(meta)에 Lemmy와 Discourse 연동에 관한 “사용법” 주제와 함께 안내 영상을 작성할 예정입니다. Lemmy를 사용 중이거나 Discourse와 연동하기를 원하신다면, 여기에 여러분의 의견과 경험을 남겨주시면 설명 자료에 반영하겠습니다.

2개의 좋아요

오, 방금 적용된 멋진 변경사항이네요:

:tada:

3개의 좋아요