ActivityPub 插件

我尝试安装此插件,但在 /logs 中始终收到此警告:

[Discourse Activity Pub] https://futarino.online/ap/actor/a3838865a250342cf09f7907b653b9d1 无法安排 https://futarino.online/ap/activity/2628ea98d33a52fd2412f9d59541bb91 进行投递:没有收件人

回溯:

/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:73:in `log_failure' 
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:31:in `can_deliver?' 
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:16:in `perform' 
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:23:in `perform' 
/var/www/discourse/plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:143:in `activity_pub_deliver_activity' 
/var/www/discourse/plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:33:in `perform_activity_pub_activity' 
/var/www/discourse/plugins/discourse-activity-pub/plugin.rb:494:in `block (2 levels) in activate!' 
/var/www/discourse/lib/plugin/instance.rb:316:in `public_send' 
/var/www/discourse/lib/plugin/instance.rb:316:in `block (2 levels) in add_to_class' 
/var/www/discourse/plugins/discourse-activity-pub/plugin.rb:502:in `block (2 levels) in activate!' 
/var/www/discourse/lib/plugin/instance.rb:316:in `public_send' 
/var/www/discourse/lib/plugin/instance.rb:316:in `block (2 levels) in add_to_class' 
/var/www/discourse/app/controllers/discourse_activity_pub/post_controller.rb:13:in `schedule' 
actionpack-7.0.7/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action' 
actionpack-7.0.7/lib/abstract_controller/base.rb:215:in `process_action' 
actionpack-7.0.7/lib/action_controller/metal/rendering.rb:165:in `process_action' 
actionpack-7.0.7/lib/abstract_controller/callbacks.rb:234:in `block in process_action' 
activesupport-7.0.7/lib/active_support/callbacks.rb:118:in `block in run_callbacks' 
/var/www/discourse/app/controllers/application_controller.rb:421: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:421:in `with_resolved_locale' 
activesupport-7.0.7/lib/active_support/callbacks.rb:127:in `block in run_callbacks' 
activesupport-7.0.7/lib/active_support/callbacks.rb:138:in `run_callbacks' 
actionpack-7.0.7/lib/abstract_controller/callbacks.rb:233:in `process_action' 
actionpack-7.0.7/lib/action_controller/metal/rescue.rb:23:in `process_action' 
actionpack-7.0.7/lib/action_controller/metal/instrumentation.rb:67:in `block in process_action' 
activesupport-7.0.7/lib/active_support/notifications.rb:206:in `block in instrument' 
activesupport-7.0.7/lib/active_support/notifications/instrumenter.rb:24:in `instrument' 
activesupport-7.0.7/lib/active_support/notifications.rb:206:in `instrument' 
actionpack-7.0.7/lib/action_controller/metal/instrumentation.rb:66:in `process_action' 
actionpack-7.0.7/lib/action_controller/metal/params_wrapper.rb:259:in `process_action' 
activerecord-7.0.7/lib/active_record/railties/controller_runtime.rb:27:in `process_action' 
actionpack-7.0.7/lib/abstract_controller/base.rb:151:in `process' 
actionview-7.0.7/lib/action_view/rendering.rb:39:in `process' 
rack-mini-profiler-3.1.1/lib/mini_profiler/profiling_methods.rb:111:in `block in profile_method' 
actionpack-7.0.7/lib/action_controller/metal.rb:188:in `dispatch' 
actionpack-7.0.7/lib/action_controller/metal.rb:251:in `dispatch' 
actionpack-7.0.7/lib/action_dispatch/routing/route_set.rb:49:in `dispatch' 
actionpack-7.0.7/lib/action_dispatch/routing/route_set.rb:32:in `serve' 
actionpack-7.0.7/lib/action_dispatch/journey/router.rb:50:in `block in serve' 
actionpack-7.0.7/lib/action_dispatch/journey/router.rb:32:in `each' 
actionpack-7.0.7/lib/action_dispatch/journey/router.rb:32:in `serve' 
actionpack-7.0.7/lib/action_dispatch/routing/route_set.rb:852:in `call' 
railties-7.0.7/lib/rails/engine.rb:530:in `call' 
railties-7.0.7/lib/rails/railtie.rb:226:in `public_send' 
railties-7.0.7/lib/rails/railtie.rb:226:in `method_missing' 
actionpack-7.0.7/lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>' 
actionpack-7.0.7/lib/action_dispatch/routing/mapper.rb:48:in `serve' 
actionpack-7.0.7/lib/action_dispatch/journey/router.rb:50:in `block in serve' 
actionpack-7.0.7/lib/action_dispatch/journey/router.rb:32:in `each' 
actionpack-7.0.7/lib/action_dispatch/journey/router.rb:32:in `serve' 
actionpack-7.0.7/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.8/lib/rack/tempfile_reaper.rb:15:in `call' 
rack-2.2.8/lib/rack/conditional_get.rb:40:in `call' 
rack-2.2.8/lib/rack/head.rb:12:in `call' 
actionpack-7.0.7/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:389:in `call' 
/var/www/discourse/lib/middleware/gtm_script_nonce_injector.rb:10:in `call' 
rack-2.2.8/lib/rack/session/abstract/id.rb:266:in `context' 
rack-2.2.8/lib/rack/session/abstract/id.rb:260:in `call' 
actionpack-7.0.7/lib/action_dispatch/middleware/cookies.rb:704:in `call' 
actionpack-7.0.7/lib/action_dispatch/middleware/callbacks.rb:27:in `block in call' 
activesupport-7.0.7/lib/active_support/callbacks.rb:99:in `run_callbacks' 
actionpack-7.0.7/lib/action_dispatch/middleware/callbacks.rb:26:in `call' 
actionpack-7.0.7/lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call' 
actionpack-7.0.7/lib/action_dispatch/middleware/show_exceptions.rb:29:in `call' 
logster-2.13.0/lib/logster/middleware/reporter.rb:40:in `call' 
railties-7.0.7/lib/rails/rack/logger.rb:40:in `call_app' 
railties-7.0.7/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.7/lib/action_dispatch/middleware/remote_ip.rb:93:in `call' 
actionpack-7.0.7/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/lib/rack/method_override.rb:24:in `call' 
actionpack-7.0.7/lib/action_dispatch/middleware/executor.rb:14:in `call' 
rack-2.2.8/lib/rack/sendfile.rb:110:in `call' 
actionpack-7.0.7/lib/action_dispatch/middleware/host_authorization.rb:131:in `call' 
rack-mini-profiler-3.1.1/lib/mini_profiler.rb:413:in `call' 
message_bus-4.3.8/lib/message_bus/rack/middleware.rb:60:in `call' 
/var/www/discourse/lib/middleware/request_tracker.rb:233:in `call' 
railties-7.0.7/lib/rails/engine.rb:530:in `call' 
railties-7.0.7/lib/rails/railtie.rb:226:in `public_send' 
railties-7.0.7/lib/rails/railtie.rb:226:in `method_missing' 
rack-2.2.8/lib/rack/urlmap.rb:74:in `block in call' 
rack-2.2.8/lib/rack/urlmap.rb:58:in `each' 
rack-2.2.8/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>'

另外,我在 Mastodon 上找不到我设置的账户。

有什么解决方案吗?

您收到此警告是因为您的类别没有关注者。您至少需要一名关注者才能进行投递。

  1. 从类别设置中复制句柄。
  2. 在 Mastodon 上搜索它(它应该会出现)。
  3. 使用您的 Mastodon 帐户关注它。

所以问题是,我搜索了它,结果却是一个大大的 404。
是因为需要一段时间才能生效吗?

摘要


ActivityPub类别设置是什么样的?您能分享一张截图(特别是状态徽章)吗?也许可以私信发给我,这样就不会占用这个话题了。

2 个赞

是否有(或将有)一种方法可以将旧主题也放到 Fediverse 上?我有一些有数千条回复的主题,但它们没有被联合。不确定如何才能联合这些主题?

管理员现在可以触发已配置类别中单个主题的发布。这在帖子的扳手菜单中可用:

但是,我们没有一个系统可以批量发布旧主题,而且它不在我们的优先列表中。考虑到社交媒体的短暂性,我不确定将历史帖子发布到 ActivityPub 会有多大兴趣。话虽如此,这很可能可以通过一个 rake 任务来完成。

6 个赞

有什么方法可以反过来操作,比如从 Mastodon 回到 Discourse?

我们有自动发布的发布说明推送到我们的 Mastodon,所以如果能将它们镜像到 Discourse 中将是惊人的。

3 个赞

目前不支持此功能,但它已在我们的路线图中,我们计划在未来 2-3 个月内着手处理。

4 个赞

这些路线图可以公开访问吗?比如在 GitHub 上?

2 个赞

是的,我很快就会在这里发布更新。(到目前为止已添加功能的路线图在本主题中再往前翻几十篇帖子。)

4 个赞

在接下来的 2-3 个月里,我们计划对该插件进行以下改进:

  • 改进插件性能(不进行任何面向用户的更改)
  • 为 Discourse 中支持 ActivityPub 的类别添加更好的 UI 元素
    • 这意味着包含有关类别 ActivityPub 统计信息的更多详细信息,以及更方便用户在 ActivityPub 客户端中关注该类别的流程
  • 允许 Discourse 类别关注外部参与者
    • 这将使 ActivityPub 内容能够同步到 Discourse 类别,包括通过 ActivityPub 进行的 Discourse 到 Discourse 同步,即 Discourse 站点 A 中的类别可以关注 Discourse 站点 B 中的类别(其中两个站点都已启用并根据需要配置了该插件)
  • 修复错误并改进现有功能
    • 处理头像同步问题以及其他用户(管理员等)对已启用 AP 的帖子的编辑
    • 如果可能,解决作者更改和维基的当前限制
17 个赞

这可能是一个令人难以置信的发展(或者至少是令人难以置信的开端 :-)。目前,Discourse 实例可能是互联网上最高质量的在线会议和讨论场所,但它们都是独立的孤岛。它们之间以及可能与其他类型的服务器(在有意义的情况下)进行某种形式的联合将打开一扇新的窗口。对此感到有些兴奋!

8 个赞

谨此告知各位,我们刚刚合并了允许 Discourse 分类关注 Fediverse 中的任何参与者(包括其他 Discourse 分类)的 PR。是的,这意味着您现在可以在两个(或三个或更多)Discourse 实例之间实现分类联合。作为此阶段的一部分,还有一些 PR 正在进行中,但这一个很重要。

这是我将我的计算机上运行的两个 Discourse 实例和一个 Mastodon 实例进行联合的视频:

29 个赞

我希望能够通过标签而不是类别来分配 ActivityPub 参与者。我认为这也可以通过聊天集成插件支持来实现,并且还可以进一步过滤内容。

另一个有趣的想法是将每个 ActivityPub 帖子放入队列中,由管理员和版主批准后再发布。如果这能让一个小组确认主题是否已准备好进行交叉发布,那将非常棒。回复也同样适用,而不是将它们从 Fediverse 自动发布回论坛。

无论如何,感谢您为这个很棒的插件所做的努力。

7 个赞

既然这个号召是针对ActivityPub软件的,也许Meta上的某个分类可以与https://socialhub.activitypub.rocks/c/software/discourse/24进行联合 :slight_smile:

4 个赞

我们一直在使用该插件,但在当前版本中,摘录的最大长度和论坛链接之间存在一个错误。如果摘录的最大长度出现在链接中间,则“在我们的论坛上讨论此问题”链接会有一个奇怪的目标:

例如:

这将得到一个最终的论坛链接:
https://jcheminf.biomedcentral.com/a%E2%80%A6%3Cbr%3E%3Cbr%3E%3Ca%20href=

我不懂 Ruby,但我想在 maxlength 处裁剪帖子的代码应该检查它是否不在链接中间,然后再添加“链接到论坛”的结尾。

4 个赞

我注意到,从提交 fb83e554fd 开始,wiki 限制似乎已移除,此时在联合类别中更改帖子所有者的限制仍然存在。

我不经常更改帖子所有者,但类别描述帖子是我关心的示例。当类别发生变化时,我会将最活跃的类别版主设置为所有者,然后鼓励他们在适当的时候进行更新。这是目前我知道的阻碍我实施此功能的最大的限制。

我认识到 Discourse 和 ActivityPub 之间的模型不匹配造成了这个问题。是否可以实施一些特权(管理员?)操作“取消此帖子的联合”,如果帖子已被联合,则发送删除活动,将其标记为永不联合,然后允许更改所有者?

5 个赞

我明白你的用例,但目前我认为这并不是非常优先的事项。现在,我想把我们的精力集中在微调 Discourse-to-Discourse 同步功能上,我认为这在未来几周内需要相当多的关注。

这是一个很好的发现,感谢你报告这个问题。我们会对此进行调查。

1 个赞

此“回填”是否来自链接的 ActivityPub 参与者?

用例:
使用已发布到 Mastodon 的公告通知填充 Discourse 类别。

3 个赞

尚不支持回填。我想特别支持它用于 Discourse 到 Discourse 的联合场景。对于您描述的用例,这可能会有点棘手。

8 个赞