Plugin ActivityPub

Ciao :wave:
Prima di tutto, grazie per l’ottimo lavoro che è stato fatto per realizzare questo. Non potrei essere più felice della decisione di spostare la nostra community su Discourse grazie a questo.

Ho aggiunto il plugin alla nostra istanza e configurato un attore. Tuttavia, quando pubblico in una categoria con un attore associato, ricevo un “Internal Server Error”. Non ho trovato molto nei log, a parte il fatto che la richiesta è fallita con un errore 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

Qual è il percorso consigliato per eseguire il debug di questo problema?

Il prossimo passo è andare su /logs sul tuo forum, trovare la riga di log corrispondente e pubblicare lo stack trace qui.

3 Mi Piace

Ecco l’errore:

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

Ehi, sono l’admin di lemmy.dbzer0.com e mi piacerebbe vedere una maggiore interazione tra Lemmy e Discourse, poiché ritengo che questi due pezzi si incastrino molto più nativamente di Discourse e Mastodon.

Sono principalmente interessato a un modo per consentire agli utenti di Lemmy di vedere e interagire con gli argomenti senza dover creare nuovi account per ogni forum di Discourse.

Per quanto ne so, il problema più grande è che il plugin apub non rappresenta le categorie di Discourse come gruppi apub, il che impedisce a Lemmy di vederle, giusto?

Comunque, voglio rendermi disponibile, nel caso in cui vogliate avere accesso a un’istanza di Lemmy e a un admin con cui testare. Il mio account su Lemmy è https://lemmy.dbzer0.com/u/db0

5 Mi Piace

Ciao ragazzi, fornirò regolarmente supporto a questo plugin da ora fino ad almeno marzo del prossimo anno. Se avete utilizzato questo plugin e state riscontrando difficoltà in qualche modo, per favore fatemelo sapere! Risponderò a quante più domande in sospeso possibile.

Ogni utente in Discourse è un Attore. Il processo di follow in Discourse funziona allo stesso modo di Lemmy, e come dettagliato ulteriormente in FEP-1b12. Il motivo per cui non è ancora possibile seguire gli Attori di Discourse (cioè, l’attenzione principale è stata sul seguire le categorie) è perché i forum sono intrinsecamente incentrati sull’argomento, cioè discussioni che coinvolgono intrinsecamente più utenti. Infatti, questo è l’approccio adottato da altre applicazioni ActivityPub in stile forum, ed è ciò su cui abbiamo lavorato nel gruppo di lavoro W3C Forum e Threaded Discussion (insieme a NodeBB e software simili).

Quello che stai descrivendo è la differenza tra la federazione “Solo Primo Post” e “Argomento Completo”. Quello che ti aspetti è come funziona la federazione “Argomento Completo”. Si prega di consultare la documentazione e i video tutorial a riguardo qui.

Questo errore significa che non stai eseguendo una versione aggiornata di Discourse. Il plugin ActivityPub attualmente richiede l’ultima versione di Discourse per funzionare.

No, il plugin ActivityPub è pienamente conforme a FEP-1b12, che è stato scritto da Nutomic (il creatore di Lemmy) per descrivere la federazione basata sui gruppi. Hai provato a federare tra Lemmy e Discourse?

2 Mi Piace

Sei in grado di indagare sul fatto che meta non mostri correttamente il mio dominio e non mostri alcun contenuto da meta?

1 Mi Piace

Esiste un server Discourse con questo plugin con cui possiamo testare? Presumo che questo forum non lo utilizzi, giusto?

1 Mi Piace

Meta utilizza activitypub, ad esempio questo argomento non era federato:

E questo lo era:

Dove posso vedere queste informazioni? Inoltre, il secondo link non è disponibile per me

L’URL (a differenza dell’URI AP) per quella pagina è

Puoi vedere le informazioni AP cliccando sull’icona AP.

1 Mi Piace

Sto lottando per trovare anche un solo argomento Apub. Per lo più l’icona non esiste

E se esiste, è disabilitato.

Tuttavia, ho seguito il link che hai postato e cercato l’URL in lemmy (che è come si recupererebbero i link a cui non ci si era precedentemente iscritti) e non può essere trovato. Inoltre, non riesco a trovare affatto il forum degli annunci in modo da potermi iscrivere.

1 Mi Piace

OK, sono riuscito a trovarlo cercandolo come announcements@meta.discourse.org e mi ci sono iscritto. Proverò a iscrivermi ad altri argomenti per vedere se riesco a vedere nuovi post su lemmy.

MODIFICA: Alcune community sono trovabili come Feature e Announcements, ma Support, Plugin e Bug non si trovano https://lemmy.dbzer0.com/search?q=!plugin%40meta.discourse.org&type=Communities&listingType=All&page=1&sort=TopAll

2 Mi Piace

Questo perché non hanno Attori. Dai un’occhiata alla documentazione e ai video tutorial. Vedrai che a ciascuna Categoria deve essere assegnato un Attore prima che sia trovabile.

Su meta, penso che solo Announcements e Feature abbiano avuto Attori creati per loro.

4 Mi Piace

Ma sono un’istanza esterna che cerca di ottenere contenuti federati da te. Non ho visibilità su questo, vero?

MODIFICA: Oh, ora vedo la scheda federazione, ma solo a volte. Altre volte non appare

2 Mi Piace

Sì, verrà affrontato presto. Se non la vedi, aggiorna la pagina e apparirà. Fammi sapere come va.

Solo una nota che io e @mcdanlj ne stiamo discutendo privatamente. È probabile che si tratti di un problema storico (cioè perché Michael è stato uno dei primi ad adottarlo).

4 Mi Piace

Sì, due domande:

  1. Che dire dell’impossibilità di trovare un thread federato esistente come New and improved About page at /about is live - Announcements - Discourse Meta? Ho provato a cercarlo su lemmy ma non appare.
  2. Perché alcuni thread in un argomento sono federati, ma altri no? Come posso saperlo?

Comunque, forse Following an ActivityPub Actor può essere aggiornato anche con alcune informazioni relative a lemmy?

1 Mi Piace

Potresti chiedere sia agli sviluppatori di Lemmy che a @angus su Lemmy - SocialHub in modo che possano coordinarsi meglio. L’interoperabilità con Lemmy sarebbe :tada:


@angus, in un recente articolo del blog di Mastodon c’è qualcosa che vale la pena implementare, ad esempio, per l’argomento in primo piano nel profilo di un utente, se quell’argomento è stato avviato da questo utente:

Abbiamo deciso di creare un nuovo tipo di tag OpenGraph, lo stesso tipo di tag che hai sul tuo sito web per determinare quale immagine di anteprima apparirà nell’anteprima della pagina quando condivisa su Discord, iMessage o Mastodon. Sembra così: <meta name="fediverse:creator" content="@Gargron@mastodon.social" />.

Il meta tag apparirebbe sull’argomento, in modo che Mastodon possa collegarsi al profilo dell’utente. So che non c’è un attore utente in Discourse, ma se l’attore ActivityPub è, diciamo, una casa editrice e l’argomento riguarda il loro catalogo, allora il caso d’uso ha senso. :wink:

1 Mi Piace

Sì, come suggerisce @hellekin, penso che una discussione più approfondita su Lemmy / Discourse sarebbe meglio gestita qui

Dato che sto riprendendo il lavoro su questo plugin, ti prego di postare lì le tue domande più dettagliate su Lemmy e ti risponderò presto.

Grazie, ci penserò.

Ci sono attori utente in Discourse. Semplicemente non puoi seguirli (attualmente). Dato che questa idea errata è già emersa tre volte oggi, sto pensando di evidenziarla da qualche parte nell’interfaccia utente. In risposta alla domanda di follow-up “Perché non puoi seguire gli attori utente se esistono?”, la domanda precedente “Perché vorresti seguire gli attori utente in Discourse?” deve essere risposta prima (cioè, qual è un caso d’uso reale).

(Sono consapevole che esiste Discourse Follow - l’ho creato - tuttavia c’è una differenza tra seguire un utente all’interno di un’istanza per scopi di notifica/scoperta e seguire un attore utente nel fediverso)

4 Mi Piace

Questo verrà risolto una volta che questo sarà unito.

Nota anche che scriverò un argomento “how to” su Lemmy <> Discourse qui su meta con un video istruttivo a breve. Se stai usando, o vuoi usare, Lemmy per federare con Discourse, per favore aggiungi qui i tuoi pensieri / esperienze e mi assicurerò di affrontarli nelle istruzioni.

2 Mi Piace

Oh, bel cambiamento appena arrivato:

:tada:

3 Mi Piace