Exécuter discourse avec Postgres fonctionnant dans docker

Salut

J’essaie de configurer Discourse dans mon environnement de développement local avec une petite différence : j’exécute Postgres dans Docker.
La base de données est accessible via psql depuis le système d’exploitation, mais lorsque j’ai essayé de créer la base de données avec rake ou rails, cela n’a pas fonctionné. J’ai suivi ces étapes :

cp discourse_defaults.conf discourse.conf

puis j’ai mis à jour discourse.conf

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

mais quand j’essaie d’exécuter db:create

la connexion au serveur sur le socket « /var/run/postgresql/.s.PGSQL.5432 » a échoué : Aucun fichier ou répertoire de ce type

Le serveur est-il en cours d'exécution localement et accepte-t-il les connexions sur ce socket ?
Impossible de créer la base de données 'discourse_development'. Veuillez vérifier votre configuration.
rails a avorté !
ActiveRecord::NoDatabaseError : la connexion au serveur sur le socket « /var/run/postgresql/.s.PGSQL.5432 » a échoué : Aucun fichier ou répertoire de ce type

Le serveur est-il en cours d'exécution localement et accepte-t-il les connexions sur ce socket ?

Causé par :
PG::ConnectionBad : la connexion au serveur sur le socket « /var/run/postgresql/.s.PGSQL.5432 » a échoué : Aucun fichier ou répertoire de ce type

Le serveur est-il en cours d'exécution localement et accepte-t-il les connexions sur ce socket ?

Tâches : TOP => db:create
(Voir la trace complète en exécutant la tâche avec --trace)

J’ai essayé avec .env

DISCOURSE_DB_HOST=127.0.0.1
DISCOURSE_DB_USERNAME=postgres
DISCOURSE_DB_PASSWORD=mysecretpassword

J’ai également essayé avec différentes adresses IP pour ‘DB_HOST’, mais j’obtiens toujours la même erreur.
Y a-t-il quelque chose que j’ai manqué ?

Je ne suis pas sûr, mais je pense que le problème vient probablement du fait que Discourse s’exécute à l’intérieur d’un conteneur Docker et ne peut donc pas accéder par défaut à votre conteneur PostgreSQL séparé.

Je pense que vous devez exposer la base de données en utilisant ce type de configuration : GitHub - discourse/discourse_docker: A Docker image for Discourse

Vous devrez peut-être également supprimer le modèle PostgreSQL du fichier app.yml.

Ces documents pourraient être utiles. Bien que vous n’utilisiez pas un serveur séparé, tout le reste devrait être pertinent.

J’espère que cela vous aidera !

Salut @phil22

Merci pour votre réponse.

Discourse ne fonctionne pas dans un conteneur Docker, il fonctionne sur mon système d’exploitation. Postgres fonctionne dans un conteneur, et j’ai exposé son port au système d’exploitation -p 5432:5432.

Cela signifie que Discourse essaie de se connecter via un socket de système de fichiers et que ce socket n’existe pas.

Pouvez-vous essayer d’ajouter un port: 5432 au fichier config/database.yml, dans la section development ?

Salut @Falco
Merci pour votre réponse.
Même chose

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)

D’accord, essayez d’ajouter cette ligne :

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

au lieu de celle du port.

Merci @Falco
J’ai essayé d’ajouter toutes les informations manquantes à database.yml, et maintenant ça fonctionne

#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

Cela signifie-t-il qu’il y a un problème dans le chargement des variables de configuration ?

Non, cela signifie simplement que le socket par défaut a la priorité sur la déclaration du port. Une façon de contourner cela est d’utiliser la clé url, mais vous pouvez consulter le code de Rails pour voir d’autres méthodes.

2 « J'aime »