Ejecutando discourse con Postgres corriendo en docker

Hola

Estoy intentando configurar Discourse en mi entorno de desarrollo local con una pequeña diferencia: estoy ejecutando Postgres en Docker.
La base de datos es accesible usando psql desde el sistema operativo, pero cuando intenté crear la base de datos usando rake o rails, no funcionó. Seguí estos pasos:

cp discourse_defaults.conf discourse.conf

luego actualicé discourse.conf

...
db_host = 127.0.0.1
...
db_username = postgres
db_password = mysecretpassword
...

pero cuando intento ejecutar db:create

la conexión al servidor en el socket "/var/run/postgresql/.s.PGSQL.5432" falló: No existe tal archivo o directorio

¿Está el servidor ejecutándose localmente y aceptando conexiones en ese socket?
No se pudo crear la base de datos 'discourse_development'. Por favor, revise su configuración.
rails abortó!
ActiveRecord::NoDatabaseError: la conexión al servidor en el socket "/var/run/postgresql/.s.PGSQL.5432" falló: No existe tal archivo o directorio

¿Está el servidor ejecutándose localmente y aceptando conexiones en ese socket?

Causado por:
PG::ConnectionBad: la conexión al servidor en el socket "/var/run/postgresql/.s.PGSQL.5432" falló: No existe tal archivo o directorio

¿Está el servidor ejecutándose localmente y aceptando conexiones en ese socket?

Tareas: TOP => db:create
(Vea el rastreo completo ejecutando la tarea con --trace)

Intenté con .env

DISCOURSE_DB_HOST=127.0.0.1
DISCOURSE_DB_USERNAME=postgres
DISCOURSE_DB_PASSWORD=mysecretpassword

También intenté con diferentes direcciones IP para ‘DB_HOST’, pero sigo recibiendo el mismo error.

¿Me falta algo?

No estoy seguro, pero creo que el problema es probablemente que Discourse se está ejecutando dentro de un contenedor de Docker y, por lo tanto, no puede acceder por defecto a tu contenedor de PostgreSQL separado.

Creo que necesitas exponer la base de datos utilizando este tipo de configuración GitHub - discourse/discourse_docker: A Docker image for Discourse

También es posible que necesites eliminar la plantilla de PostgreSQL del archivo app.yml.

Estos documentos podrían ser útiles; aunque no se está ejecutando en un servidor separado, todo lo demás debería ser relevante.

¡Espero que esto ayude!

Hola @phil22

Gracias por tu respuesta.

Discourse no se está ejecutando dentro de un contenedor Docker, se está ejecutando en mi sistema operativo. Postgres se está ejecutando dentro de un contenedor y expuse su puerto al sistema operativo -p 5432:5432.

Eso significa que Discourse está intentando conectarse a través de un socket del sistema de archivos y ese socket no existe.

¿Puedes intentar agregar un port: 5432 al archivo config/database.yml, en la sección de desarrollo?

Hola @Falco
gracias por tu respuesta.
Lo mismo

conexión al servidor en el socket "/var/run/postgresql/.s.PGSQL.5432" fallida: No existe tal archivo o directorio
¿Está el servidor ejecutándose localmente y aceptando conexiones en ese socket?
No se pudo crear la base de datos 'discourse_development'. Por favor, comprueba tu configuración.
rails abortado!
ActiveRecord::NoDatabaseError: conexión al servidor en el socket "/var/run/postgresql/.s.PGSQL.5432" fallida: No existe tal archivo o directorio
¿Está el servidor ejecutándose localmente y aceptando conexiones en ese socket?


Causado por:
PG::ConnectionBad: conexión al servidor en el socket "/var/run/postgresql/.s.PGSQL.5432" fallida: No existe tal archivo o directorio
¿Está el servidor ejecutándose localmente y aceptando conexiones en ese socket?

Tareas: TOP => db:create
(Ver el rastro completo ejecutando la tarea con --trace)

Okay, intenta añadir esta línea:

  url: postgresql://postgres::postgres@localhost:5432/discourse_development?pool=5

en lugar de la de port.

Gracias @Falco
Intenté añadir toda la información que faltaba a database.yml y ahora funciona

#cat database.yml 
development:
  prepared_statements: false
  adapter: postgresql
  database: <%= ENV['DISCOURSE_DEV_DB'] || 'discourse_development' %>
  min_messages: warning
  port: 5432
  host: localhost
  user: postgres
  password: mysecretpassword
  pool: 5
  timeout: 5000

¿Significa esto que hay un problema en la carga de las variables de configuración?

No, solo significa que el socket predeterminado tiene prioridad sobre la declaración del port. Una forma de solucionar eso es usar la clave url, pero puedes revisar el código de Rails para ver otras formas.

2 Me gusta