Esecuzione di discourse con Postgres in esecuzione in docker

Ciao

Sto cercando di configurare Discourse nel mio ambiente di sviluppo locale con una piccola differenza: sto eseguendo Postgres in Docker.
Il database è accessibile tramite psql dal sistema operativo, ma quando ho provato a creare il database usando rake o rails, non ha funzionato. Ho seguito questi passaggi:

cp discourse_defaults.conf discourse.conf

quindi ho aggiornato discourse.conf

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

ma quando provo a eseguire db:create

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?
Couldn't create 'discourse_development' database. Please check your configuration.
rails aborted!
ActiveRecord::NoDatabaseError: 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?


Caused by:
PG::ConnectionBad: 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?


Tasks: TOP => db:create
(See full trace by running task with --trace)

Ho provato con .env

DISCOURSE_DB_HOST=127.0.0.1
DISCOURSE_DB_USERNAME=postgres
DISCOURSE_DB_PASSWORD=mysecretpassword

Ho anche provato con diversi indirizzi IP per ‘DB_HOST’, ma continuo a ricevere lo stesso errore.

Mi manca qualcosa?

Non sono sicuro, ma penso che il problema sia probabilmente che discourse è in esecuzione all’interno di un container docker e quindi non può accedere per impostazione predefinita al tuo container postgres separato.

Credo che tu debba esporre il database utilizzando questo tipo di configurazione GitHub - discourse/discourse_docker: A Docker image for Discourse

Potrebbe anche essere necessario rimuovere il template postgres dal file app.yml.

Questi documenti potrebbero essere utili: anche se non stai eseguendo su un server separato, tutto il resto dovrebbe essere pertinente.

Spero che questo aiuti!

Ciao @phil22

Grazie per la tua risposta.

Discourse non è in esecuzione all’interno di un container Docker, è in esecuzione nel mio sistema operativo. Postgres è in esecuzione all’interno di un container e ho esposto la sua porta al sistema operativo -p 5432:5432.

Ciò significa che Discourse sta tentando di connettersi tramite un socket del filesystem e tale socket non esiste.

Puoi provare ad aggiungere una port: 5432 al file config/database.yml, nella sezione di sviluppo?

Ciao @Falco
grazie per la tua risposta.
La stessa cosa

connessione al server su socket "/var/run/postgresql/.s.PGSQL.5432" fallita: File o directory non esistente
	Il server è in esecuzione localmente e accetta connessioni su quel socket?
Impossibile creare il database 'discourse_development'. Controlla la tua configurazione.
rails aborted!
ActiveRecord::NoDatabaseError: connessione al server su socket "/var/run/postgresql/.s.PGSQL.5432" fallita: File o directory non esistente
	Il server è in esecuzione localmente e accetta connessioni su quel socket?


Causato da:
PG::ConnectionBad: connessione al server su socket "/var/run/postgresql/.s.PGSQL.5432" fallita: File o directory non esistente
	Il server è in esecuzione localmente e accetta connessioni su quel socket?

Tasks: TOP => db:create
(Vedi la traccia completa eseguendo il task con --trace)

Okay, prova ad aggiungere questa riga:

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

al posto di quella della port.

Grazie @Falco
Ho provato ad aggiungere tutte le informazioni mancanti a database.yml e ora funziona

#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

Ciò significa che c’è un problema nel caricamento delle variabili di configurazione?

No, significa solo che il socket predefinito ha la priorità sulla dichiarazione della port. Un modo per aggirare questo problema è usare la chiave url, ma puoi controllare il codice di Rails per vedere altri modi.

2 Mi Piace