Plugin ActivityPub

Tentei instalar este plugin e sempre recebo este aviso em /logs:

[Discourse Activity Pub] https://futarino.online/ap/actor/a3838865a250342cf09f7907b653b9d1 falhou ao agendar https://futarino.online/ap/activity/2628ea98d33a52fd2412f9d59541bb91 para entrega: sem destinatários

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

Além disso, não consigo encontrar a conta que configurei no Mastodon.

Existe alguma solução para isso?

Você está recebendo este aviso porque sua categoria não tem seguidores. Você precisa de pelo menos um seguidor para que uma entrega ocorra.

  1. Copie o identificador das configurações da categoria.
  2. Procure por ele no Mastodon (ele deve aparecer).
  3. Siga-o com sua conta do Mastodon.

Então o problema é que eu procurei e recebi um grande 404.
É porque leva um tempo para que isso tenha efeito?

Resumo


Como são as configurações de categoria do ActivityPub? Você poderia compartilhar uma captura de tela delas (particularmente o selo de status). Talvez me enviar em uma mensagem privada para não tomarmos conta deste tópico.

2 curtidas

Existe (ou haverá) uma maneira de colocar tópicos antigos no fediverso também? Tenho tópicos com milhares de respostas e eles não são federados. Não tenho certeza de como federar esses tópicos?

Os administradores agora podem acionar a publicação de um tópico individual em uma categoria configurada. Isso está disponível no menu de chave inglesa da postagem:

No entanto, não temos um sistema implementado para publicar vários tópicos antigos em massa e isso não está em nossa lista de prioridades. Dada a natureza efêmera das mídias sociais, não tenho certeza se há muito interesse em postagens históricas serem publicadas no ActivityPub. Dito isso, isso é provavelmente factível com uma tarefa rake.

6 curtidas

Existe uma maneira de fazer o caminho inverso, digamos, do Mastodon para o Discourse?

Temos notas de lançamento automatizadas enviadas para o nosso Mastodon, então seria incrível tê-las espelhadas no Discourse.

3 curtidas

Atualmente isso não é suportado, mas está em nosso roteiro e planejamos trabalhar nisso nos próximos 2-3 meses.

4 curtidas

Esses roteiros podem ser acessados publicamente, como no GitHub?

2 curtidas

Sim, postarei uma atualização aqui em breve. (O roteiro para os recursos adicionados até o momento está algumas dezenas de posts atrás neste tópico.)

4 curtidas

Certo, eis o que planejamos para o plugin nos próximos 2-3 meses:

  • melhorar o desempenho do plugin (sem alterações visíveis para o usuário)
  • adicionar melhores elementos de UI a uma categoria habilitada para ActivityPub no Discourse
    • isso significa incluir mais detalhes sobre as estatísticas de ActivityPub da categoria, bem como um fluxo mais fácil para usuários que desejam seguir a categoria em seu cliente ActivityPub
  • permitir que categorias do Discourse sigam atores externos
    • isso permitiria a sincronização de conteúdo ActivityPub com uma categoria do Discourse, incluindo sincronização Discourse-para-Discourse via ActivityPub, ou seja, uma categoria no site A do Discourse pode seguir uma categoria no site B do Discourse (onde ambos os sites têm o plugin ativado e configurado adequadamente)
  • correções de bugs e melhorias na funcionalidade existente
    • tratamento de problemas de sincronização de avatares e edições de posts habilitados para AP por outros usuários (equipe, etc.)
    • se possível, abordar limitações atuais para alterações de autor e wikis
17 curtidas

Esta poderia ser uma evolução incrível (ou pelo menos o início de algo incrível :-). No momento, as instâncias de discourse são talvez os locais de reunião e discussão online de maior qualidade na internet, mas são todas ilhas separadas. Algum tipo de federação entre elas e talvez com outros tipos de servidores (quando fizer sentido) abriria uma nova janela. Observando isso com algum entusiasmo!

8 curtidas

Só para avisar a vocês, acabamos de mesclar o PR que permite que uma categoria do Discourse siga qualquer ator no fediverso, incluindo outras categorias do Discourse. Sim, isso significa que agora você pode federar uma categoria entre dois (ou três, ou mais) Discourses. Há mais alguns PRs no pipeline como parte desta fase, mas este foi um grande.

Aqui está um vídeo de mim federando entre duas instâncias do Discourse e uma instância do Mastodon rodando no meu computador

29 curtidas

Tenho esperança de atribuir atores do ActivityPub por tag, em vez de categoria. Acho que isso também funcionaria com o suporte do plugin de integração de chat, além de permitir uma filtragem de conteúdo mais aprofundada.

Outra ideia interessante seria colocar cada postagem do ActivityPub em uma fila para aprovação de administradores e moderadores antes de ir ao ar. Isso seria ótimo se permitisse que um grupo confirmasse se o tópico estava pronto para ser republicado. O mesmo poderia ser aplicado a respostas, em vez de postá-las automaticamente do fediverso de volta ao fórum.

Obrigado de qualquer forma por trabalhar neste incrível plugin.

7 curtidas

Como esta chamada é para software ActivityPub, talvez haja uma categoria aqui no Meta com a qual possamos federar Discourse - SocialHub :slight_smile:

4 curtidas

Estamos gostando do plugin, mas há um bug na versão atual entre o maxlength do trecho e o link para o fórum. Se o maxlength do trecho atingir o meio de um link, o link “Discutir isso em nosso fórum” terá um destino estranho:

Por exemplo:

Isso gera um link final para o fórum:
https://jcheminf.biomedcentral.com/a%E2%80%A6%3Cbr%3E%3Cbr%3E%3Ca%20href=

Não sou fluente em Ruby, mas imagino que o código para cortar a postagem em maxlength deva verificar se não está no meio de um link antes de adicionar o final “link para o fórum”.

4 curtidas

Observo que, a partir do commit fb83e554fd, a restrição de wiki parece ter sido removida e que, neste momento, a restrição de alteração do proprietário da postagem em categorias federadas permanece.

Eu não altero o proprietário da postagem com frequência, mas as postagens de descrição de categoria são um exemplo que importa para mim. Eu configuro o moderador de categoria mais ativo como proprietário quando isso muda, momento em que eu o encorajo a atualizá-lo quando apropriado. Esta é agora a maior restrição que conheço que me impede de implementar isso.

Reconheço o descasamento de modelo entre Discourse e ActivityPub que cria essa preocupação. Faria sentido implementar alguma ação privilegiada (admin?) “desfederar esta postagem” que enviaria uma atividade de exclusão para a postagem se ela foi federada, marcaria para nunca federar e, em seguida, permitiria a alteração do proprietário?

5 curtidas

Entendo seu caso de uso, mas não vejo isso como uma prioridade muito alta no momento. Por enquanto, gostaria de focar nossos esforços em ajustar o recurso de sincronização Discourse-to-Discourse, acho que isso exigirá bastante atenção nas próximas semanas.

Essa é uma boa descoberta, obrigado por relatar o problema. Vamos investigar.

1 curtida

Essa “preenchimento retroativo” será feita a partir do ator do ActivityPub vinculado?

Caso de uso:
Preencher uma categoria do Discourse com avisos já publicados no Mastodon.

3 curtidas

O preenchimento retroativo ainda não é suportado. Gostaria de apoiá-lo especialmente para o cenário de federação Discourse-para-Discourse. Pode ser um pouco mais complicado para o caso de uso que você descreveu.

8 curtidas