Плагин 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 не удалось запланировать доставку https://forum.linux.it/ap/activity/229b771ac7e5943928795da1122d847d: нет получателей

/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] (его нужно проверить и слить)

Это будет стандартная поддержка блоков Markdown в Discourse, следуя подходу, описанному здесь

Так что этот

[note]
Первая строка

Вторая строка
[/note]

Третья строка

создаст содержимое заметки:

"Первая строка\nВторая строка"

А этот

[note]Первая строка

Вторая строка[/note]

Третья строка

создаст содержимое заметки:

Первая строка\nВторая строка\nТретья строка

(то есть теги [note][/note] игнорируются и удаляются)

Это означает, что никто не подписан на актор категории, поэтому доставлять некому.

2 лайка

Так что, по той же причине, должен ли быть зелёный маркер в посте, указывающий, был ли он опубликован или нет?
Сейчас я подписан на все различные категории в Mastodon и проведу тест.

Я могу подтвердить, что это работает: необходимо, чтобы аккаунт был подписан.

1 лайк

Возможно, вы ожидаете, что даже без подписчиков посты Актора категории будут отображаться как тосты в представлении Актора в Mastodon? Для этого Mastodon необходимо реализовать версию импорта outbox, то есть:

Обратите внимание, что этот плагин скоро поддержит импорт outbox (функциональность уже реализована и будет доступна администраторам в предстоящих обновлениях). Иными словами, вы сможете заполнить контент удалённого аккаунта ретроспективно.

3 лайка

У меня теперь работает, используя Making sure you're not a bot!.

1 лайк

У меня тоже возникает ошибка «полная заметка не указана». Что я делаю не так? Нужно ли добавить символ @ в показанном ниже разделе?

Не уверен, в чём именно моя ошибка.

Извините, я не совсем понял. Не могли бы вы пояснить немного подробнее?

Ничего не публикуется в ActivityPub.

Не могли бы вы немного подробнее объяснить, чего вы ожидаете? Например:

  1. Я создаю пост на своём форуме.
  2. Я ожидаю увидеть…

Я думал, что когда я публикую пост в категориях, где это включено, он будет опубликован в ActivityPub, но этого не происходит. Они вообще не публикуются.

Что вы имеете в виду под «ActivityPub»? Где вы ожидаете увидеть результат? Извините за вопросы. Я хочу разобраться в проблеме с точки зрения удобства использования, поэтому пытаюсь попросить вас объяснить это своими словами :slight_smile:

У вас может быть та же проблема, о которой сообщали другие: у вашей категории нет подписчиков. Пост не появится нигде, если за ним никто не следит, потому что некуда его отправить. Иными словами:

Публикация через ActivityPub работает только при наличии отношений подписки. Ваш актор категории всё ещё будет отображаться в Mastodon (или других сервисах), даже без подписчиков, но помните, что то, что Mastodon показывает вам там, зависит от самого Mastodon.

Если бы вы могли немного подробнее описать свои ожидания, это бы очень помогло! Возможно, вы могли бы привести пример другого сервиса ActivityPub, где, по вашему мнению, это работает? Спасибо.

Маленький значок глаза перечеркнут, и при нажатии на него появляется сообщение: «Это не опубликовано».

Скорее всего, это связано с тем, что за вашей категорией никто не следит. Если вы включите настройку сайта activity_pub_verbose_logging и посмотрите логи, то, вероятно, увидите сообщение следующего вида:

Я обязательно добавлю «причину» в это модальное окно, так как эта ситуация уже возникала несколько раз! Подпишитесь на свою категорию в Mastodon, а затем создайте новую тему.

**Или, возможно, я просто изменю статус на «опубликовано» в этом случае, так как активность действительно добавляется в исходящую очередь. Просто она никуда не отправляется (поскольку некому её отправлять). Так что технически она «опубликована» (то есть находится в исходящей очереди).

3 лайка

Это хорошее время для внедрения этого протокола, или мне стоит подождать немного? Я хочу открыть своё сообщество для Fediverse и сохранить весь контент для всех навсегда, но я читал о Mastodon и Lemmy и предполагаю, что не все новые законы уже вступили в силу.

Думаю, обсуждение правовых обстоятельств в какой-либо конкретной юрисдикции, вероятно, выходит за рамки этой темы. :slight_smile:

1 лайк

Несколько обновлений, которыми хотим поделиться! Вся конфигурация ActivityPub вскоре будет перенесена в единую панель администратора:

Скоро станут возможными следующие теги:

Наряду с NodeBB, Flarum, Lemmy и рядом других платформ ActivityPub мы создали рабочую группу W3C для лучшего согласования программного обеспечения для форумов и обмена ссылками в Федиверсе. Мы уже координируем эту работу через ActivityPub. Например, наше следующее собрание организовано в одной теме одновременно на Discourse и NodeBB:

6 лайков