Incluyendo más plugins populares con Discourse core

[quote=“Ethsim2, post:29, topic:373574”]La dificultad radica en saber qué complementos debes eliminar de tu app.yml y cuáles no debes eliminar.
[/quote]

Ese es precisamente el motivo por el que este tema es a donde debemos ser dirigidos. La publicación original incluye una lista que parece actualizarse con bastante frecuencia. Si observas el historial de edición, puedes saber qué complementos se añadieron y cuándo.

3 Me gusta

¡Hemos terminado por ahora! El último que queda es el día del pastel y se hará en unos meses más.

6 Me gusta

Me tropecé y caí sobre esto hace poco. He estado empezando a investigar el desarrollo de Discourse, así que quería practicar mi flujo de trabajo de actualización:

# git pull
# bundle install
# pnpm install
# ./bin/rails db:migrate

Pero sospecho que el plugin Discourse AI requiere el plugin Pgvector para PostgreSQL (que no sabía que existía previamente):

== 20230710171141 EnablePgVectorExtension: migrando ==========================
-- enable_extension(:vector)
bin/rails aborted!
StandardError: Se ha producido un error, esta y todas las migraciones posteriores se cancelaron: (StandardError)

ERROR:  la transacción actual está abortada, los comandos se ignoran hasta el final del bloque de transacción
/home/john/development/discourse/lib/mini_sql_multisite_connection.rb:109:in 'MiniSqlMultisiteConnection#run'
/home/john/development/discourse/plugins/discourse-ai/db/migrate/20230710171141_enable_pg_vector_extension.rb:8:in 'EnablePgVectorExtension#change'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'block in FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/migration/safe_migrate.rb:28:in 'Migration::SafeMigrate::SafeMigration#migrate'
/home/john/development/discourse/lib/migration/safe_migrate.rb:53:in 'Migration::SafeMigrate::NiceErrors#migrate'
/home/john/development/discourse/lib/tasks/db.rake:267:in 'block (2 levels) in <main>'
/home/john/development/discourse/lib/distributed_mutex.rb:53:in 'block in DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'Thread::Mutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:34:in 'DistributedMutex.synchronize'
/home/john/development/discourse/lib/tasks/db.rake:242:in 'block in <main>'

Caused by:
PG::InFailedSqlTransaction: ERROR:  la transacción actual está abortada, los comandos se ignoran hasta el final del bloque de transacción (PG::InFailedSqlTransaction)
/home/john/development/discourse/lib/mini_sql_multisite_connection.rb:109:in 'MiniSqlMultisiteConnection#run'
/home/john/development/discourse/plugins/discourse-ai/db/migrate/20230710171141_enable_pg_vector_extension.rb:8:in 'EnablePgVectorExtension#change'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'block in FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/migration/safe_migrate.rb:28:in 'Migration::SafeMigrate::SafeMigration#migrate'
/home/john/development/discourse/lib/migration/safe_migrate.rb:53:in 'Migration::SafeMigrate::NiceErrors#migrate'
/home/john/development/discourse/lib/tasks/db.rake:267:in 'block (2 levels) in <main>'
/home/john/development/discourse/lib/distributed_mutex.rb:53:in 'block in DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'Thread::Mutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:34:in 'DistributedMutex.synchronize'
/home/john/development/discourse/lib/tasks/db.rake:242:in 'block in <main>'

Caused by:
ActiveRecord::StatementInvalid: PG::FeatureNotSupported: ERROR:  la extensión \"vector\" no está disponible (ActiveRecord::StatementInvalid)
DETAIL:  No se puede abrir el archivo de control de extensión «/usr/share/postgresql/extension/vector.control»: No existe tal archivo o directorio.
HINT:  La extensión debe instalarse primero en el sistema donde se está ejecutando PostgreSQL.
/home/john/development/discourse/plugins/discourse-ai/db/migrate/20230710171141_enable_pg_vector_extension.rb:6:in 'EnablePgVectorExtension#change'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'block in FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/migration/safe_migrate.rb:28:in 'Migration::SafeMigrate::SafeMigration#migrate'
/home/john/development/discourse/lib/migration/safe_migrate.rb:53:in 'Migration::SafeMigrate::NiceErrors#migrate'
/home/john/development/discourse/lib/tasks/db.rake:267:in 'block (2 levels) in <main>'
/home/john/development/discourse/lib/distributed_mutex.rb:53:in 'block in DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'Thread::Mutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:34:in 'DistributedMutex.synchronize'
/home/john/development/discourse/lib/tasks/db.rake:242:in 'block in <main>'

Caused by:
PG::FeatureNotSupported: ERROR:  la extensión \"vector\" no está disponible (PG::FeatureNotSupported)
DETAIL:  No se puede abrir el archivo de control de extensión «/usr/share/postgresql/extension/vector.control»: No existe tal archivo o directorio.
HINT:  La extensión debe instalarse primero en el sistema donde se está ejecutando PostgreSQL.
/home/john/development/discourse/plugins/discourse-ai/db/migrate/20230710171141_enable_pg_vector_extension.rb:6:in 'EnablePgVectorExtension#change'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'block in FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/migration/safe_migrate.rb:28:in 'Migration::SafeMigrate::SafeMigration#migrate'
/home/john/development/discourse/lib/migration/safe_migrate.rb:53:in 'Migration::SafeMigrate::NiceErrors#migrate'
/home/john/development/discourse/lib/tasks/db.rake:267:in 'block (2 levels) in <main>'
/home/john/development/discourse/lib/distributed_mutex.rb:53:in 'block in DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'Thread::Mutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:34:in 'DistributedMutex.synchronize'
/home/john/development/discourse/lib/tasks/db.rake:242:in 'block in <main>'
Tasks: TOP => db:migrate

Puedo instalarlo, pero me pregunto si hay alguna forma de deshabilitar plugins en este nivel para que sus migraciones simplemente se omitan. (Preferiría no instalar software adicional, especialmente para un “plugin” que no me interesa explorar para el desarrollo).

4 Me gusta

También me encontré con esto hoy. Instalé el paquete con sudo, después de recibir ayuda de ChatGPT. También me pregunto esto; me pregunto, quizás eliminar la carpeta del plugin del directorio /plugins ayude :thinking:… pero git pull más adelante puede que la reinstale.

2 Me gusta

Me opongo a este cambio. Normalmente, en el desarrollo de software, tener un núcleo “lean” significa que la distribución principal puede ser más pequeña, más rápida y tener menos superficie de ataque. Mi última incursión en los plugins me llevó a ver que es técnicamente posible que el código de un plugin se ejecute incluso cuando está “deshabilitado”, ya que parecía depender del autor del plugin verificarlo, por lo que parece que esto aumenta significativamente el riesgo y la hinchazón.

El problema más inmediato es que no parece que se hayan actualizado las instrucciones en la guía de instalación (¿quizás simplemente me las perdí?). No está claro qué necesitamos instalar para que las cosas vuelvan a funcionar. Resolví algunos errores instalando el paquete de Ubuntu postgresql-16-pgvector, pero todavía tuve algunos errores de vector al ejecutar db:migrate. Pude sortearlos eliminando localmente el plugin de IA.

De todos modos, este es un montón de código adicional, muchos de estos plugins son completamente irrelevantes para los casos de uso de la mayoría de las comunidades de Discourse. (¡Esto no quiere decir que sean plugins malos! Estoy seguro de que son muy útiles para las comunidades que los necesitan. Simplemente me cuesta ver que cada foro comunitario necesite venir con integración de Zendesk, etc.). El plugin de IA en particular, dados sus requisitos adicionales que están rompiendo las cosas, definitivamente debería ser eliminado en mi opinión.

A nivel personal, cuando inicio sesión en mi panel de administración y de repente veo un montón de plugins de publicidad, incluso si el código debería ser inerte, me preocupa enormemente. Deseo expresar, en los términos más enérgicos posibles, que NO quiero ningún plugin de publicidad de las grandes tecnológicas en mis instalaciones por defecto, ni siquiera deshabilitados. Esa es una industria que históricamente ha sido increíblemente abusiva con la privacidad del usuario y Discourse no se ayuda a sí mismo al enviar integraciones de este tipo por defecto. Aquellos que quieran publicidad no tendrían problemas en encontrar el plugin correspondiente, no es necesario incluirlo en todas las instalaciones.

TLDR: Por favor, reconsideren este cambio. :folded_hands:

5 Me gusta

Discourse está integrando plugins en el núcleo que siempre se ofrecen en sus alojamientos oficiales.

2 Me gusta

Estoy de acuerdo en que esto añade una carga adicional a la interfaz de administración, con muchos nombres de marca que cuentan como publicidad para mi cerebro. Esto no es bueno. Como defensor del software libre que lucha por evitar las grandes marcas, considero que da un paso que Ubuntu dio hace algunos años antes de ser completamente colonizado por Armazon, Gaggle y consortes. Si dejas que lleguen a tus ojos, terminarán tragándotelos.

Incluir los complementos en el núcleo también brinda a los desarrolladores la oportunidad de convertir erróneamente la funcionalidad de un complemento en un requisito con el tiempo, mientras que mantenerlos como complementos garantiza que ese tipo de error no se pueda cometer.

¿Puede el @equipo aclarar la justificación de este cambio?

Si se trata de acelerar las instalaciones en la infraestructura de Discourse, ¿quizás la creación de un paquete discourse-hosting-bundle creado automáticamente en CI podría lograr el mismo resultado?

4 Me gusta

@david, ¿puedes mantener el orden alfabético en la lista de Plugins afectados?

La motivación aquí es proporcionar una experiencia más fluida para los usuarios primerizos de Discourse, de modo que obtengan una experiencia de Discourse más “completa” desde el primer momento.

Otra motivación es la experiencia del desarrollador para nuestro equipo y para los colaboradores de la comunidad. Al tener todos estos complementos incluidos en el núcleo, ya no es necesario considerar la compatibilidad con diferentes versiones del núcleo. Eso es particularmente útil para complementos como discourse-ai, que se están desarrollando mucho en este momento, en paralelo con los cambios relacionados en el núcleo.

Los complementos de autenticación de marca son los que tienen más probabilidades de ser absorbidos por el núcleo, al igual que nuestros métodos de autenticación principales existentes, como Google/Facebook/etc. Por lo tanto, es muy probable que se eliminen de la lista en un futuro no muy lejano.

Este cambio no se relaciona con el rendimiento en nuestro alojamiento. Ya teníamos una distribución precompilada con todos estos complementos, y más, como usted describe. :ok_hand:

He corregido el orden :+1:

7 Me gusta

Ya se ha respondido en el OP:

Algunos ejemplos de esto:

  • no tenemos que preocuparnos por el control de versiones si agregamos algo en el núcleo para un plugin, sabemos que ambos están en la misma versión
  • es más fácil probar un plugin que depende de otro plugin si el código está presente para ambos
  • cuando cambiamos algo en el núcleo, a menudo tenemos que hacer varios PR solo para corregir especificaciones en los plugins, ahora significa solo un PR independiente

El resultado final es más tiempo disponible para que el equipo de Discourse mejore y mantenga el producto en lugar de lidiar con este tipo de problemas, por lo que, finalmente, usted también gana.

12 Me gusta

Me gustaría mucho que desaparecieran de mi interfaz de usuario, pero solo están ocupando espacio, porque no son opcionales ni ocultos: son parte del núcleo. Precisamente por eso estamos preocupados.

Con respecto a la experiencia del primer usuario, tal vez cambiar la plantilla del contenedor para incluir y documentar el paquete oficial funcionaría:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          # El plugin docker_manager es obligatorio para las actualizaciones automatizadas basadas en web
          - git clone https://github.com/discourse/docker_manager.git
          # Los siguientes plugins se instalan en todas las instancias alojadas de Discourse.
          # Descomenta la línea eliminando `#` antes de la línea `- git clone` para habilitarlos.
          # Ver https://meta.discourse.org/t/bundling-more-popular-plugins-with-discourse-core/373574/
          # Plugin de publicidad de Discourse (Ads): https://meta.discourse.org/t/discourse-advertising-plugin-ads/33734
          #- git clone https://github.com/discourse/discourse-adplugin
          # Afiliado de Discourse
          #- git clone https://github.com/discourse/discourse-affiliate
          # ...
          # ...
          # Por favor, añade otros plugins a continuación. Para una lista de plugins oficiales, ver:
          # https://meta.discourse.org/tag/official
          # Para todos los plugins disponibles, ver:
          # https://meta.discourse.org/c/plugin/22

Con respecto a la experiencia del desarrollador, seguramente puedes automatizar el paso de las versiones de los plugins de otra manera menos intrusiva. Por ejemplo, usando una regla de pups para descomentar los plugins utilizando la estrategia de documentación anterior.

Incluso podrías tener una plantilla de contenedor que lo haga por ti:

templates:
  - "templates/discourse.hosting.yml"
  - "templates/discourse.core-bundle.yml"

Tenga en cuenta que mi primera impresión fue buena: pude descubrir un par de plugins interesantes que aún no estaban en mi radar. Pero sí, dado que te he visto optimizar y buscar el mínimo común denominador durante la última década, me sorprende que esta sea la forma en que manejas tal propuesta.

4 Me gusta

Creo que puedes agregar un rm - rf discourse-ai donde suelen estar los comandos git clone. Yo no lo he hecho.

4 Me gusta

Sí, técnicamente puedes eliminar todas las carpetas en el directorio de plugins y Discourse principal seguirá funcionando.

5 Me gusta

Es una buena apuesta que estos plugins desarrollados por el equipo de discourse sigan las reglas y añadan una sobrecarga mínima. Tenerlos todos activados facilita ver que todos funcionan juntos y comparten los mismos requisitos.

¿Estás ejecutando una base de datos postgres externa en lugar de la incluida? ¿Estás ejecutando una configuración de dos contenedores que no se ha actualizado en mucho tiempo?

Puedes esforzarte por eliminarlos, pero no pueden hacer nada a menos que crees una cuenta con las empresas malvadas y obtengas claves para permitir que comience el rastreo.

5 Me gusta

Gracias por tu respuesta,

Esperemos que sí, pero es una superficie adicional para errores y ataques, a cambio de ningún beneficio para las comunidades que no utilizan estos plugins (que serán la mayoría de las comunidades).

Siento que Discourse ha identificado un problema real aquí, pero ha llegado a la solución equivocada.

Estoy totalmente de acuerdo en que existe un problema raíz real con la fragilidad del ecosistema de desarrollo/plugins para Discourse. Definitivamente es difícil desarrollarse contra un objetivo en movimiento, y los cambios en la API en el núcleo ciertamente lo dificultan. Hasta cierto punto, eso es solo parte del desarrollo contra la vanguardia, pero es exactamente por eso que ese no debería ser el comportamiento predeterminado. Tener solo un par de plugins simples me permite comprender y empatizar con tu problema (que es mucho mayor en alcance que el mío).

Sin embargo, lo que Discourse está haciendo aquí es simplemente patear la lata hacia adelante. Quizás resuelva el problema para Discourse, pero no lo resuelve para el resto de los desarrolladores de plugins. Todos los demás están pasando por el mismo dolor, solo que a menor escala.

Una mejor solución sería tener una serie LTS (soporte a largo plazo) más robusta contra la cual se pueda desarrollar. Sé que esto se ha discutido en otros lugares, así que no lo repetiré, pero uno de los mayores desafíos para las comunidades, los desarrolladores de plugins e incluso los empleados de Discourse parece ser que no hay LTS. Se desaconseja activamente el uso de la rama estable. Si se utilizara un proceso de desarrollo más tradicional, sería mucho más fácil para el desarrollo de plugins. Podríamos tener momentos conocidos en los que las cosas se romperán (actualizaciones de versiones principales) y planificar en consecuencia. De lo contrario, podemos estar seguros de que las actualizaciones menores no romperán aleatoriamente nuestros foros. (Este es probablemente uno de los mayores problemas de Discourse en mi opinión, y uno que he visto surgir en otros lugares cuando la gente discute opciones de foros. La volatilidad es un inconveniente real).

Sí, según el enlace, me encontré con esto en un entorno de desarrollo que no estaría basado en contenedores. (Aún no lo he probado en contenedores de producción).

Creo que esta es una de las cosas que me preocupa, es si la ruta ‘estándar’ asume que estos plugins existen, entonces podría encontrarme con errores porque todos los demás aceptan plugins de publicidad. Tengo que arriesgarme a que surjan errores inesperados o lidiar con una carga adicional de plugins. Mi objetivo es tener la mayor estabilidad posible para mis implementaciones.

También vale la pena señalar que incluso el núcleo de Discourse es bastante pesado en términos de uso de recursos en comparación con otros foros. Creo que vale la pena intentar mantener el núcleo ligero para no exacerbar aún más los problemas de rendimiento.

Aún no los he auditado para asegurarme de que no estén extrayendo JavaScript de seguimiento/llamada a casa mientras están deshabilitados, pero hasta entonces asumiré que tienes razón. Espero que alguien lo verifique, porque será un gran debacle si resulta ser falso.

Creo que el punto de Hellekin sobre el desorden es válido, y también creo que lo que están insinuando con el plugin de anuncios de grandes tecnológicas no será bien recibido por algunos en la comunidad de código abierto, el tipo que es más probable que use foros de código abierto en primer lugar.

De todos modos, también me gustaría decir que aprecio que escuches mis comentarios, ¡aunque no sea fácil!

4 Me gusta

Creo que es difícil saber cuáles han sido revisados ​​antes y cuáles no.

Me pregunté brevemente si habías comprobado de antemano si había algún comentario abierto que ahora faltara, ya que solo se agregaron los textos y no todos los datos de Crowdin. Pero supongo que ni siquiera quiero saber la respuesta a esa pregunta. Al final, no hay diferencia si nadie responde durante meses o si las preguntas y comentarios de los traductores simplemente desaparecen.

1 me gusta

¿Hay pruebas para que no haya efectos secundarios al eliminar directorios de plugins con el nuevo paquete, para asegurar que un plugin no se convierta inadvertidamente en un requisito?

2 Me gusta

Nuestra suite de pruebas principal se ejecuta sin ningún plugin cargado, así que sí, cualquier dependencia de core → plugins debería ser detectada por CI.

4 Me gusta

Comenté las líneas para clonar los plugins pero cuando vuelvo a ejecutar “launcher rebuild app” obtengo los mismos mensajes:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate' falló con retorno #<Process::Status: pid 546 exit 1>
Ubicación del fallo: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:in `spawn'
exec falló con los parámetros {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap falló con código de salida 1
---
HINT: El plugin 'discourse-reactions' ahora está incluido con Discourse y no debe incluirse en la configuración de su contenedor.
Elimine la línea 'git clone https://github.com/discourse/discourse-reactions' de su archivo containers/app.yml, luego intente de nuevo.
Para más información, vea https://meta.discourse.org/t/373574
---
---
HINT: El plugin 'discourse-data-explorer' ahora está incluido con Discourse y no debe incluirse en la configuración de su contenedor.
Elimine la línea 'git clone https://github.com/discourse/discourse-data-explorer' de su archivo containers/app.yml, luego intente de nuevo.
Para más información, vea https://meta.discourse.org/t/373574
---
---
HINT: El plugin 'discourse-solved' ahora está incluido con Discourse y no debe incluirse en la configuración de su contenedor.
Elimine la línea 'git clone https://github.com/discourse/discourse-solved' de su archivo containers/app.yml, luego intente de nuevo.
Para más información, vea https://meta.discourse.org/t/373574
---
** FALLÓ EL ARRANQUE ** por favor, desplácese hacia arriba y busque mensajes de error anteriores, puede haber más de uno.

La razón de la falla se encuentra encima de la línea FAILED.