Executando Discourse com Postgres rodando em docker

Olá

Estou tentando configurar o Discourse em meu ambiente de desenvolvimento local com apenas uma pequena diferença: estou executando o Postgres no Docker.
O banco de dados é acessível usando psql do sistema operacional, mas quando tentei criar o banco de dados usando rake ou rails, não funcionou. Segui estes passos:

cp discourse_defaults.conf discourse.conf

então atualizei discourse.conf

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

mas quando tento executar 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)

Tentei com .env

DISCOURSE_DB_HOST=127.0.0.1
DISCOURSE_DB_USERNAME=postgres
DISCOURSE_DB_PASSWORD=mysecretpassword

Também tentei com diferentes endereços IP para DB_HOST, mas ainda estou recebendo o mesmo erro.

Há algo que estou perdendo?

Não tenho certeza, mas acho que o problema provavelmente é que o Discourse está rodando dentro de um contêiner Docker e, portanto, não pode acessar seu contêiner PostgreSQL separado por padrão.

Acho que você precisa expor o banco de dados usando este tipo de configuração: GitHub - discourse/discourse_docker: A Docker image for Discourse

Você também pode precisar remover o template do PostgreSQL do arquivo app.yml.

Estes documentos podem ser úteis - embora você não esteja rodando em um servidor separado, todo o resto deve ser relevante.

Espero que ajude!

Olá @phil22

Obrigado pela sua resposta.

O Discourse não está rodando dentro de um contêiner Docker, está rodando no meu sistema operacional. O Postgres está rodando dentro de um contêiner, e eu expus sua porta para o sistema operacional -p 5432:5432.

Isso significa que o Discourse está tentando se conectar via um socket de sistema de arquivos e esse socket não existe.

Você pode tentar adicionar uma port: 5432 ao arquivo config/database.yml, na seção de desenvolvimento?

Olá @Falco
obrigado pela sua resposta.
Mesma coisa

conexão com o servidor no socket "/var/run/postgresql/.s.PGSQL.5432" falhou: Nenhum arquivo ou diretório encontrado
	O servidor está em execução localmente e aceitando conexões nesse socket?
Não foi possível criar o banco de dados 'discourse_development'. Verifique sua configuração.
rails abortou!
ActiveRecord::NoDatabaseError: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
	O servidor está em execução localmente e aceitando conexões nesse socket?


Causado por:
PG::ConnectionBad: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
	O servidor está em execução localmente e aceitando conexões nesse socket?

Tarefas: TOP => db:create
(Veja o rastreamento completo executando a tarefa com --trace)

Ok, tente adicionar esta linha:

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

em vez da linha port.

Obrigado @Falco
Tentei adicionar todas as informações que faltavam ao database.yml e agora está funcionando

#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

Isso significa que há um problema no carregamento das variáveis de configuração?

Não, isso apenas significa que o socket padrão tem prioridade sobre a declaração port. Uma maneira de contornar isso é usar a chave url, mas você pode verificar o código do Rails para ver outras maneiras.

2 curtidas