Trabajo en gitpod.io, un IDE gratuito de un clic para GitHub. Actualmente usamos Spectrum para nuestra comunidad, pero tenemos algunos problemas con él y nos encantaría levantar una instancia de Discourse para probarla y, posiblemente, migrar.
Nos gustaría usar nuestra cuenta de Google Cloud para ello, si es posible. ¿Podrías indicarme la dirección correcta? Por ejemplo, ¿es el nuevo Google Cloud Run una buena opción para ejecutar una instancia de Discourse?
Además, dado que nuestra misión es automatizar por completo todas las configuraciones de desarrollo (al menos para proyectos de código abierto), me gustaría contribuir con una configuración totalmente automatizada para Discourse, permitiendo a los colaboradores iniciar un entorno de Discourse listo para codificar en línea con un solo clic (en lugar de leer largas listas de instrucciones de configuración e instalar/configurar manualmente una serie de dependencias en su dispositivo actual). Ya he comenzado a trabajar en esto basándome en la excelente configuración automatizada de Discourse para Janitor de @notriddle (¡hola!).
Sin embargo, actualmente me enfrento a un problema, ya que recientemente las instrucciones de configuración fallan por falta de una tabla “polls”. No estoy seguro de cómo solucionarlo aún, pero seguiré investigando. Solo pensé en mencionarlo aquí.
Podría serlo, pero no es tan sencillo. Discourse no es un contenedor sin estado, que es precisamente para lo que está diseñado Google Cloud Run; por lo tanto, necesitarás una forma de agregar algún tipo de volumen persistente para los datos que almacena Discourse (archivos subidos, avatares, base de datos).
Yo usaría una instancia normal de Google Compute y punto. Con algún tipo de script o herramientas de gestión de infraestructura, deberías poder automatizar el despliegue de nuevas instancias de Discourse. Esta guía también podría ayudarte: Install Discourse on Ubuntu or Debian for Development
¿Qué instrucciones de configuración estás utilizando? Si falta la tabla polls, sugiere que no has ejecutado las migraciones del plugin. Deberían ejecutarse automáticamente en modo de desarrollo. En modo de prueba, necesitas agregar LOAD_PLUGINS=1 antes del comando rake db:migrate
Eso suena más razonable que usar Cloud Run, ya que extraer todo el estado de los contenedores de Discourse podría llevar algún tiempo. ¡Gracias por señalarme la guía! Intentaré seguirla para configurar una instancia de Compute y volveré aquí con mis hallazgos.
== Seed from /workspace/discourse/db/fixtures/990_settings.rb
Discourse hostname: localhost is not a valid domain for emails!
== Seed from /workspace/discourse/db/fixtures/990_topics.rb
rake aborted!
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "polls" does not exist
LINE 8: WHERE a.attrelid = '"polls"'::regclass
^
¡Muchas gracias por el consejo! Lo probaré y también volveré aquí con novedades. (Perdón por hacer dos preguntas en una. Espero que no haga la discusión demasiado confusa.)
La instalación para desarrolladores es mucho más lenta y está diseñada para… el desarrollo. Por lo tanto, querrás seguir las instrucciones de instalación estándar. Es bastante fácil automatizarla. Mi servicio de instalación está ahora completamente automatizado (excepto por la configuración DNS requerida por Mailgun, ya que no tengo control sobre el DNS del cliente).
La parte difícil de la instalación es la configuración del correo.
Además, la instalación y el mantenimiento son cosas diferentes.
¡Gracias @pfaffman! Perdón por la confusión, mezclé dos cosas en mi mensaje original: 1) instalar Discourse para la comunidad de Gitpod, y 2) automatizar la configuración de desarrollo para desarrolladores y contribuyentes de Discourse. Afortunadamente, estoy siguiendo la guía de desarrolladores para el punto 2), no para el 1).
== Seed from /workspace/discourse/db/fixtures/990_settings.rb
Discourse hostname: localhost is not a valid domain for emails!
== Seed from /workspace/discourse/db/fixtures/990_topics.rb
rake aborted!
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "polls" does not exist
LINE 8: WHERE a.attrelid = '"polls"'::regclass
^
¿Entendí correctamente tu sugerencia? ¿Tendrías otras ideas sobre cómo solucionarlo? (Intenté eliminar las tablas antes, pero falló con un error diferente que no recuerdo. Aunque estoy dispuesto a intentarlo de nuevo.)
Además, olvidé mencionar que mis instrucciones de configuración funcionaron hasta la semana pasada más o menos, así que el error apareció recientemente después de un rebase de Discourse. Creo que fue después de la migración a Rails 6, ¿quizás? DEV: Upgrade Discourse to Rails 6 (#8083) · discourse/discourse@32b8a2c · GitHub
Para tu información, puedes reproducir fácilmente el error intentando abrir mi fork de Discourse en Gitpod: Dashboard . Verás que mi configuración automatizada falla y obtendrás un entorno interactivo donde se pueden probar varios comandos de Discourse en la Terminal.
Contrario al mensaje del commit, creo que las migraciones de los plugins funcionaban antes de este commit. Ya no lo hacen. No importa si se proporciona LOAD_PLUGINS=1 o no: las migraciones de los plugins no se están ejecutando en mi entorno de desarrollo.
Creo que he encontrado el problema: ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: la relación "polls" no existe
Cuando load_config se evalúa durante la creación de la base de datos, sobrescribe migrations_paths.
Comencé a depurar ese código sobre la población de la base de datos de pruebas, pero me perdí. Por alguna razón, después de cargar el esquema, al llamar a db:migrate, Rails aún intenta evaluar las migraciones y recibimos un error indicando que la tabla ya existe. Hasta ahora, no he podido encontrar una razón.
¡Muchas gracias por investigar este error! Por ahora usaré las instrucciones actualizadas para solucionarlo.
¡Ajá, interesante, gracias! Revisaré los Dockerfiles de desarrollo existentes para ver si se pueden iniciar con un solo clic en Gitpod. Eso sería genial.
(Pero ahora, DISCOURSE_DEV_HOST=.gitpod.io bundle exec rails s -b 0.0.0.0 parece entrar en un ciclo de reinicios con:
/workspace/.rvm/gems/activesupport-6.0.0/lib/active_support/dependencies.rb:551:in `load_missing_constant': Unable to autoload constant Version, expected /workspace/discourse/lib/version.rb to define it (LoadError)
y el servidor web volvió a bloquear mi URL de vista previa de Gitpod:
Hola Jan, si tienes tiempo, me da curiosidad saber cuáles fueron los problemas o qué no funcionó como esperabas con Spectrum.
He estado siguiendo un poco a Spectrum, leyendo sobre ellos de vez en cuando.
(Intenté enviarte un mensaje privado sobre esto, pero por alguna razón, cuando hago clic en tu perfil, no hay un botón para enviar un mensaje privado.)