Postgres parece no estar en ejecución al ejecutar Discourse localmente usando Docker

Para mi empresa, necesito desarrollar algunas funcionalidades contra la API REST de nuestra instancia de Discourse. Para el desarrollo y las pruebas locales, he estado siguiendo Install Discourse for development using Docker con éxito durante bastante tiempo.

Han pasado algunas semanas desde la última vez que estuve desarrollando. Ayer quise iniciar Discourse localmente de nuevo, así que hice mi habitual git pull && d/boot_dev && d/bundle install && d/rails s. Sin embargo, el último comando d/rails s falla con el siguiente error:

URGENT: Failed to initialize site default: ActiveRecord::ConnectionNotEstablished connection to server on socket \"/var/run/postgresql/.s.PGSQL.5432\" failed: No such file or directory
        Is the server running locally and accepting connections on that socket?

/home/discourse/.bundle/gems/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:69:in `rescue in new_client'
[...etc.]

Cuando abro una Terminal en el contenedor discourse_dev y ejecuto ls -la /var/run/postgresql/, puedo ver que, efectivamente, no hay ningún socket .s.PGSQL.5432 aquí.

Ok, así que pensé que tal vez no debería haber hecho un git pull ciegamente primero, así que revisé la etiqueta v4.4.0 e incluso la etiqueta v3.3.0 y volví a intentarlo. Pero obtengo exactamente el mismo error.

Me parece que la base de datos Postgres no se está ejecutando dentro del contenedor discourse_dev.

Lo raro es: Si clono el repositorio de Discourse en una nueva carpeta (sí, incluso el último código en la rama main) e inicio Discourse usando Docker, no obtengo este error y Discourse se inicia correctamente. Pero, por supuesto, tengo una base de datos vacía, lo cual es un poco desafortunado. Entiendo que los datos se persisten dentro de tmp/postgres, que puedo copiar de la carpeta antigua a la nueva. Pero ya no puedo hacer eso porque no lo sabía ayer, y en mis intentos de solución de problemas de ayer, eliminé todas las carpetas temporales y las carpetas node_modules y .pnpm-store, etc. Pero el problema aún persiste.

¿Alguien tiene alguna idea de lo que está pasando aquí o qué puedo hacer para solucionar esto?

Parece que algo está completamente roto con mis datos locales que impide que postgres se inicie.

Cuando hago sudo cp -pr discourse/data/postgres discourse2/data/postgres obtengo exactamente el mismo problema al intentar iniciar Discourse desde la carpeta discourse2. A la inversa, cuando elimino discourse/data/postgres, mi instancia original de Discourse arranca bien, pero sin datos, por supuesto :frowning:

Lamento las molestias. Esto probablemente se debió a la reciente actualización de PostgreSQL 15 en PostgreSQL 15 update. Los archivos de datos antiguos de PG 13 son incompatibles con la imagen discourse_dev, que ahora ejecuta PG 15, pero nuestro procedimiento automatizado de actualización de bases de datos no estaba diseñado para entornos de desarrollo.

¿Alguna razón en particular por la que quieras conservar los archivos de datos antiguos?

Puedes ejecutar rake dev:populate dentro del contenedor para generar algunos datos de prueba.

1 me gusta

No uses esa guía. Necesita ser actualizada o eliminada.

Usa esta: Developing Discourse using a Dev Container

2 Me gusta

Oh, esto tiene mucho sentido. Muchas gracias por la explicación. Hoy aprendí que es una mala idea hacer un git pull a ciegas en la rama main, ya que se pueden romper muchas cosas sin querer :slight_smile:

Solo por algunas configuraciones de administración, específicamente con respecto a Discourse Connect. También algunas configuraciones de la API REST, algunas configuraciones de complementos y algunos grupos de usuarios específicos manuales. Tenemos una configuración SSO peculiar en marcha que gestiona categorías y grupos de usuarios (+ membresía de grupo) a través de la API REST. El contenido real, como publicaciones y respuestas, no me importa en absoluto durante el desarrollo, por eso rake dev:populate no me ayudaría, supongo.

No hay resentimientos aquí.

Si tu sitio de staging/producción ya está actualizado a PG 15, puedes extraer una copia de seguridad de allí.

Alternativamente, podrías intentar actualizar manualmente tus archivos de datos locales. Esto podría ayudar:

cd discourse
mkdir data/postgres_new
docker run --rm \
	--entrypoint=/bin/bash \
	-v "$(pwd)/data/postgres":/var/lib/postgresql/13/data \
	-v "$(pwd)/data/postgres_new":/var/lib/postgresql/15/data \
	tianon/postgres-upgrade:13-to-15 \
	-c "apt-get update && apt-get install -y postgresql-13-pgvector postgresql-15-pgvector &&
	docker-upgrade"
mv data/postgres data/postgres_old
mv data/postgres_new data/postgres
docker run --rm -v "$(pwd)/data/postgres":/postgres \
discourse/discourse_dev:release chown -R postgres:postgres /postgres

(Si estás usando un procesador basado en ARM, tendrás que construir tu propia imagen.)

1 me gusta

¡Muchas gracias por tu constructiva respuesta!

Esto será útil cuando mis colegas y yo actualicemos nuestra instancia local de Discourse a una versión posterior a la 3.4.0.

Por ahora, sin embargo, he comenzado con un conjunto de datos nuevo y he vuelto a aplicar la configuración necesaria. Por suerte, ya teníamos una guía interna escrita que instruye a nuestros colegas de desarrollo sobre cómo empezar a desarrollar contra Discourse :slight_smile:

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.