Tuve algunas ideas aleatorias que se me ocurrieron, y una de ellas fue un plugin para instalar plugins. Eso requiere una reconstrucción del foro. ¿Hay alguna forma de reconstruir usando Ruby? Realmente no quiero intentar:
En una instalación estándar, Discourse (y por lo tanto, los plugins) se ejecutan dentro de un contenedor de Docker. Ese contenedor no tiene acceso completo al sistema de archivos del host, por lo que no puede acceder al directorio /var/discourse del host para modificar app.yml o ejecutar launcher.
E incluso si pudiera… hay una pequeña dependencia circular aquí. Ejecutar ./launcher rebuild mataría el contenedor de Docker… lo que mataría el launcher rebuild que iniciaste desde el plugin
Hay posibles soluciones aquí. Por ejemplo, añadir montajes de volúmenes de Docker adicionales, para que la configuración/launcher pueda ser accedida desde dentro del contenedor. Pero no es trivial.
Si mal no recuerdo, alguien creó una vez un plugin de ‘gestor de plugins’… que requería algunos ajustes en el app.yml para añadir cosas como el montaje del volumen. Pero ahora no puedo encontrar ningún tema al respecto, así que asumo que ya no se mantiene. ¿Quizás alguien más pueda compartir un enlace si lo encuentra? (o tal vez todo fue un sueño )
En el lado de CDCK, definitivamente nos inclinamos por usar temas cuando queremos que los clientes puedan instalar/actualizar/desinstalar a voluntad. Permitir que las personas instalen plugins arbitrariamente no es una opción, porque eso afectaría a otros clientes que se ejecutan en el mismo servidor.
Dashboard.literatecomputing.com instalará y eliminará plugins editando app.yml (o web_only.yml) y realizando la reconstrucción (en realidad, bootstrap, destroy, rebuild). En una instalación de dos contenedores, el tiempo de inactividad es mínimo.
También hace cosas como actualizar docker y postgres, docker prune, etc. Dado que todo gestiona una instalación estándar, no estás atado a él y no puede romper nada a menos que esté haciendo algo (como instalar un plugin defectuoso).
Es un plugin de Discourse (privado) que impulsa un playbook de Ansible. Puedes unirte al grupo de prueba gratuito y usarlo gratis (con soporte limitado).
Pero existen los problemas de mantener los plugins en el contenedor y en el app.yml para cuando reconstruyas la próxima vez.
Me he visto en apuros varias veces al hacer un ./launcher destroy app;./launcher start app para aplicar nuevas variables de entorno de app.yml solo para descubrir que el contenedor “nuevo” está desactualizado respecto a la versión de la base de datos. Es aún peor si alguien ha actualizado solo algunos plugins en el contenedor que funcionaban con la versión de Discourse que estaba en el contenedor antiguo, pero no con la que obtienes al reconstruir. . .
Por eso el plugin ProCouese solo clonó los repositorios, y solo se puede eliminar a través de esa página de plugin para rm -rf la carpeta del plugin clonado.
En realidad, funcionó bastante bien como prueba de concepto. Podría necesitar algunos ajustes, ya que se dijo que podría dificultar la resolución de problemas. Así que tal vez necesite información de la línea de comandos sobre cómo acceder al instalador de procouree. Tal vez un mejor archivo de registro.
Lo bueno es que puedes deshabilitar todos los plugins simplemente eliminando/comentando el instalador de pro course. Aunque ahora está roto.
Joe tiene algunas ideas muy avanzadas. Si no me equivoco, ¿él hizo el plugin inicial de Post Voting?