Complemento ActivityPub

Intenté instalar este plugin y siempre obtengo esta advertencia en /logs:

[Discourse Activity Pub] https://futarino.online/ap/actor/a3838865a250342cf09f7907b653b9d1 failed to schedule https://futarino.online/ap/activity/2628ea98d33a52fd2412f9d59541bb91 for delivery: no recipients

backtrace:

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

Además, no puedo encontrar la cuenta que configuré en Mastodon.

¿Hay alguna solución para esto?

Recibes esa advertencia porque tu categoría no tiene seguidores. Necesitas al menos un seguidor para que ocurra una entrega.

  1. Copia el identificador de la configuración de la categoría.
  2. Búscalo en Mastodon (debería aparecer).
  3. Síguelo con tu cuenta de Mastodon.

Entonces el problema es que lo busqué y obtuve un gran 404.
¿Es porque tarda un tiempo en surtir efecto?

Resumen


¿Cómo se ven la configuración de la categoría de ActivityPub? ¿Podrías compartir una captura de pantalla (en particular la insignia de estado)? Quizás envíamela por mensaje privado para no acaparar este tema.

2 Me gusta

¿Hay (o habrá) una forma de poner también temas antiguos en fediverse? Tengo temas con miles de respuestas y no están federados. ¿No estoy seguro de cómo se procederá a federar esos temas?

Los administradores ahora pueden activar la publicación de un tema individual en una categoría configurada. Esto está disponible en el menú de herramientas de la publicación:

Sin embargo, no tenemos un sistema implementado para publicar temas antiguos en bloque y no está en nuestra lista de prioridades, dada la naturaleza efímera de las redes sociales, no estoy seguro de que haya mucho interés en que las publicaciones históricas se publiquen en ActivityPub. Dicho esto, es probable que esto sea factible con una tarea de rake.

6 Me gusta

¿Hay alguna forma de hacer lo contrario, por ejemplo, de Mastodon a Discourse?

Tenemos notas de lanzamiento automatizadas que se publican en nuestro Mastodon, por lo que sería increíble tenerlas reflejadas en Discourse.

3 Me gusta

Actualmente esto no es compatible, pero está en nuestra hoja de ruta y planeamos trabajar en ello durante los próximos 2-3 meses.

4 Me gusta

¿Se puede acceder públicamente a estas hojas de ruta, como en GitHub?

2 Me gusta

Sí, publicaré una actualización aquí en breve. (La hoja de ruta de las funciones añadidas hasta la fecha se encuentra un par de docenas de publicaciones antes en este tema).

4 Me gusta

Aquí está lo que tenemos planeado para el plugin en los próximos 2-3 meses:

  • mejorar el rendimiento del plugin (sin cambios visibles para el usuario)
  • añadir mejores elementos de interfaz de usuario a una categoría habilitada para ActivityPub en Discourse
    • esto significa incluir más detalles sobre las estadísticas de ActivityPub de la categoría, así como un flujo más fácil para los usuarios que deseen seguir la categoría en su cliente de ActivityPub
  • permitir que las categorías de Discourse sigan actores externos
    • esto permitiría sincronizar contenido de ActivityPub a una categoría de Discourse, esto incluye la sincronización de Discourse a Discourse a través de ActivityPub, es decir, una categoría en el sitio A de Discourse puede seguir una categoría en el sitio B de Discourse (donde ambos sitios tienen el plugin habilitado y configurado según corresponda)
  • corrección de errores y mejoras a la funcionalidad existente
    • manejo de problemas de sincronización de avatares y ediciones de publicaciones habilitadas para AP por otros usuarios (personal, etc.)
    • si es posible, abordar las limitaciones actuales para los cambios de autor y los wikis
17 Me gusta

Este podría ser un desarrollo increíble (o al menos el comienzo de algo increíble :-)). En este momento, las instancias de Discourse son quizás los lugares de reunión y discusión en línea de mayor calidad en Internet, pero todas son islas separadas. Algún tipo de federación entre ellas y quizás con otros tipos de servidores (cuando tenga sentido) abriría una nueva ventana. ¡Observando esto con cierto entusiasmo!

8 Me gusta

Solo para que sepan, acabamos de fusionar la solicitud de extracción (PR) que permite que una categoría de Discourse siga a cualquier actor en el fediverso, incluidas otras categorías de Discourse. Sí, eso significa que ahora puedes federar una categoría entre dos (o tres, o más) Discourse. Hay algunas PR más en proceso como parte de esta fase, pero esa fue una importante.

Aquí hay un video mío federando entre dos instancias de Discourse y una instancia de Mastodon ejecutándose en mi computadora.

29 Me gusta

Tengo la esperanza de poder asignar actores de ActivityPub por etiqueta en lugar de por categoría. Creo que esto también funcionaría a través del soporte del plugin de integración de chat, además de permitir una mayor filtración de contenido.

Otra idea interesante sería poner cada publicación de ActivityPub en una cola para su aprobación por parte de administradores y moderadores antes de que se publique. Esto sería genial si pudiera permitir a un grupo confirmar si el tema estaba listo para ser publicado en varios sitios. Lo mismo podría aplicarse a las respuestas, en lugar de publicarlas automáticamente desde el fediverso de vuelta al foro.

Gracias de todos modos por trabajar en este increíble plugin.

7 Me gusta

Dado que esta llamada es para software ActivityPub, tal vez haya una categoría aquí en Meta con la que podríamos federarnos Discourse - SocialHub :slight_smile:

4 Me gusta

Hemos estado disfrutando del plugin, pero hay un error en la versión actual entre el maxlength del extracto y el enlace al foro. Si el maxlength del extracto se produce en medio de un enlace, el enlace “Discuss this on our forum” (Comentar esto en nuestro foro) obtiene un destino extraño:

Por ejemplo:

Esto obtiene un enlace de foro final:
https://jcheminf.biomedcentral.com/a…<br><br><a href=

No soy experto en Ruby, pero supongo que el código para recortar la publicación en maxlength debería verificar que no esté en medio de un enlace antes de agregar el final “link to forum”.

4 Me gusta

Observo que a partir del commit fb83e554fd, la restricción de wiki parece eliminada, y que en este punto la restricción para cambiar el propietario de la publicación en categorías federadas permanece.

No cambio el propietario de la publicación a menudo, pero las publicaciones de descripción de categoría son un ejemplo que me importa. Designo al moderador de categoría más activo como propietario cuando eso cambia, momento en el cual lo animo a actualizarlo cuando sea apropiado. Esta es ahora la mayor restricción que conozco que me impide implementar esto.

Reconozco el desajuste del modelo entre Discourse y ActivityPub que crea esta preocupación. ¿Tendría sentido implementar alguna acción privilegiada (de administrador?) “desfederar esta publicación” que envíe una actividad de eliminación para la publicación si ha sido federada, marque para que nunca se federada y luego permita el cambio de propietario?

5 Me gusta

Entiendo tu caso de uso, pero no lo veo como una prioridad muy alta en este momento. Por ahora, me gustaría centrar nuestros esfuerzos en ajustar la función de sincronización de Discourse a Discourse, creo que requerirá bastante atención durante las próximas semanas.

Es un buen hallazgo, gracias por informar del problema. Vamos a investigarlo.

1 me gusta

¿Se realizará este “relleno” desde el actor de ActivityPub vinculado?

Caso de uso:
Poblar una categoría de Discourse con avisos ya publicados en Mastodon.

3 Me gusta

La retrocarga aún no es compatible. Me gustaría admitirla especialmente para el escenario de federación de Discourse a Discourse. Podría ser un poco más complicado de hacer para el caso de uso que describiste.

8 Me gusta