Я займусь явной поддержкой Pixelfed после того, как ещё раз изучу Lemmy и WordPress
Хотя все платформы ActivityPub, в теории, должны быть совместимы, для правильной настройки каждой интеграции почти всегда требуется небольшая доработка. Особенно это касается того, что мы используем темы, в то время как большинство других реализаций работают просто как потоки публикаций.
Wordpress? У них есть собственное решение от Automattic. Хотя всё это про «друзей» кажется немного странным. Или вы имеете в виду ту штуку с профилем пользователя?
Я пытаюсь заставить это работать должным образом с тех пор, как я писал в августе, и, думаю, моя проблема может быть проще, чем я сначала думал.
Возможно, мне запрещено подписываться на аккаунт актора в инстансе Mastodon.
За это время я переустановил Discourse и плагин, перенёс сайт на другой сервер, а сегодня ещё и сменил доменное имя, подумав, что проблема могла быть в нём.
Мне удалось подписаться с аккаунта mastodon.social и с аккаунта инстанса Sharkey, и в обоих случаях всё работало нормально.
Я не думаю, что инстанс заблокирован на сервере (опять же, я менял провайдера серверов и доменные имена), но хотел бы получить второе мнение.
[Discourse Activity Pub] Запрос GET к https://mastodon.ie/users/padraig не удался: Ожидалось ([200, 201, 202, 301, 302, 307, 308]), а получено (401 Unauthorized)
[Discourse Activity Pub] Не удалось обработать https://mastodon.ie/users/padraig: Не удалось разрешить актора
[Discourse Activity Pub] Не удалось обработать https://mastodon.ie/b35f6088-19b9-472d-a277-e0310fed585f: Не удалось создать актора
[Discourse Activity Pub] DiscourseActivityPub::AP::Handlers::Warning
Если вам нужен трассировка стека и/или переменные окружения, дайте знать
Разрешён ли mastodon.ie в разделе activity pub allowed request origins? Возможно, вам также потребуется включить или отключить параметр activity pub require signed requests.
У меня это отключено, и в следующих настройках нет записей (значит, любой должен иметь возможность подписаться на @general@gamersandgeeks.net, верно?):
У меня несколько форумов Discourse, подключённых через плагин ActivityPub. Если я установлю Discourse AI на один из этих форумов, сможет ли бот с ИИ получать доступ к контенту других федерированных экземпляров и использовать его для ответов на вопросы в чат-интерфейсе?
@Crakila Пожалуйста, ознакомьтесь с шагами и обсуждением в этой теме и продолжите обсуждение там, если эти предложения не решат вашу проблему:
Если контент федеративно передан на экземпляр, бот ИИ на этом экземпляре может использовать этот контент. Весь «удаленный» контент на экземпляре имеет тот же статус, что и «локальный» контент, с точки зрения работы других функций.
Сообщение (46 копий)
Исключение задачи: отсутствует метод `skip_email_validation=' для экземпляра Category
Трассировка стека
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activemodel-7.2.2.1/lib/active_model/attribute_methods.rb:512:in `method_missing'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/attribute_methods.rb:491:in `method_missing'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/actor_handler.rb:150:in `update_user'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/actor_handler.rb:47:in `block in update_or_create_user'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:359:in `transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/transactions.rb:234:in `block in transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:415:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_handling.rb:296:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/transactions.rb:233:in `transaction'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/actor_handler.rb:45:in `update_or_create_user'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/actor_handler.rb:82:in `update_or_create_user'
/var/www/discourse/plugins/discourse-activity-pub/plugin.rb:782:in `block (2 levels) in activate!'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/handlers.rb:76:in `block in apply_handlers'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/handlers.rb:74:in `all?'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/handlers.rb:74:in `apply_handlers'
/var/www/discourse/plugins/discourse-activity-pub/plugin.rb:873:in `block (2 levels) in activate!'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/handlers.rb:76:in `block in apply_handlers'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/handlers.rb:74:in `all?'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/handlers.rb:74:in `apply_handlers'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/handlers.rb:24:in `apply_handlers'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/activity.rb:64:in `perform_activity'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/activity.rb:38:in `block in perform_transactions'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/transaction.rb:616:in `block in within_new_transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/concurrency/null_lock.rb:9:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/transaction.rb:613:in `within_new_transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:361:in `transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/transactions.rb:234:in `block in transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:421:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_handling.rb:296:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/transactions.rb:233:in `transaction'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/activity.rb:34:in `perform_transactions'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/activity/announce.rb:26:in `process'
/var/www/discourse/plugins/discourse-activity-pub/app/jobs/discourse_activity_pub_process.rb:12:in `execute'
/var/www/discourse/app/jobs/base.rb:316:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:303:in `block in perform'
/var/www/discourse/app/jobs/base.rb:299:in `each'
/var/www/discourse/app/jobs/base.rb:299:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:202:in `execute_job'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:170:in `block (2 levels) in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:177:in `block in invoke'
/var/www/discourse/lib/sidekiq/pausable.rb:132:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:179:in `block in invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:182:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:169:in `block in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:113:in `local'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq.rb:44:in `block in <module:Sidekiq>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:263:in `stats'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:13:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:80:in `global'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:124:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:39:in `prepare'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:123:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:168:in `process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:78:in `process_one'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:68:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:8:in `watchdog'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:17:in `block in safe_thread'
Это моя учётная запись. Это то, что звучит так, будто я не подтвердил свою электронную почту в экземпляре или somehow в категории, и ActivityPub не знает, как обработать эту ситуацию?
Планируется ли сделать пользователей Discourse также акторами?
Учитывая, что ActivityPub — это протокол для работы в открытом доступе, это кажется недостающим шагом для использования Discourse как места, за которым можно следить в своих мыслях.
Пользователи Discourse уже являются акторами ActivityPub. Вы просто не можете подписываться на них. Плагин создан с учётом такой возможности. Вопрос лишь в том, насколько это разумно.
Мне это не нравится. Это меняет саму основную идею форумов, превращая их в чистые инстансы Mastodon, а для этого у нас уже есть выбор — Mastodon. Всё ещё существует большая разница между подпиской на темы и подпиской на людей.
Обмен контентом через ActivityPub — это совершенно другая вещь.
Это сразу же погубит хотя бы мой форум. Даже сейчас обмен через ActivityPub является большим «нет» для некоторых моих пользователей. А ситуация, когда одни пользователи будут полностью использовать Mastodon через Discourse, а другие — нет, создаст гигантский конфликт.
Некоторые могут сказать, что это повседневная жизнь в мире Mastodon, потому что даже если кто-то участвует в обсуждении, вся беседа не видна, если не перейти на оригинал через браузер. Но всё же — нет.
Я планирую развернуть платформу для прямой трансляции с собственным хостингом и использовать Discourse как форумное ПО, интегрировав чат Discourse в прямую трансляцию.
Недавно я изучал программное обеспечение для федиверса и подумал, что Peertube отлично подойдёт для загрузки VOD-контента, что повысит обнаруживаемость моей платформы, так как люди смогут видеть видео в Mastodon, а затем узнавать о rest моего сайта.
Могу ли я использовать этот плагин, чтобы разрешить пользователям входить в мой экземпляр Discourse с помощью их AP-аккаунта, подобно тому, как многие сайты предлагают вход через Google/Facebook?
Как вы считаете, можно ли в общем виде ответить на вопрос о том, разумно ли это, учитывая все возможные варианты использования Discourse?
В моём случае я всё ещё ищу способы продуктивного использования Fediverse. Мне бы хотелось мыслить публично, используя экземпляр Discourse в качестве своего цифрового сада. На данный момент единственный способ, который я вижу для создания публичной ленты моих мыслей, — это создать аккаунт на экземпляре Mastodon, подписаться на все категории моего частного сада и репостить каждое сообщение, которое я публикую через этот аккаунт.
Я хотел бы поэкспериментировать с использованием Discourse как основного канала связи с Fediverse.