Para minha empresa, preciso desenvolver alguns recursos contra a API REST da minha instância do Discourse. Para desenvolvimento e testes locais, tenho seguido Install Discourse for development using Docker com sucesso por um bom tempo.
Faz algumas semanas que não desenvolvo. Ontem, quis iniciar o Discourse localmente novamente, então fiz meu usual git pull && d/boot_dev && d/bundle install && d/rails s. No entanto, o último comando d/rails s falha com o seguinte erro:
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...]
Quando abro um Terminal no contêiner discourse_dev e executo ls -la /var/run/postgresql/, vejo que realmente não há um socket .s.PGSQL.5432 aqui.
Ok, então pensei que talvez eu não devesse ter feito um git pull cegamente primeiro, então fiz checkout da tag v4.4.0 e até mesmo da tag v3.3.0 e tentei novamente. Mas estou recebendo exatamente o mesmo erro.
Parece-me que o banco de dados Postgres não está rodando dentro do contêiner discourse_dev?
O estranho é: se eu clonar o repositório discourse em uma nova pasta (sim, até mesmo o código mais recente no branch main) e iniciar o Discourse usando Docker, não recebo esse erro e o Discourse inicia com sucesso. Mas, claro, terei um banco de dados vazio, o que é um pouco infeliz. Entendo que os dados são persistidos dentro de tmp/postgres, que posso copiar da pasta antiga para a nova. Mas não posso mais fazer isso porque não sabia disso ontem, e em minhas tentativas de solução de problemas de ontem, deletei todas as pastas temporárias e as pastas node_modules e .pnpm-store e assim por diante. Mas o problema ainda persiste.
Alguém tem alguma ideia do que está acontecendo aqui ou o que posso fazer para solucionar isso?
Parece que algo está completamente quebrado com meus dados locais que impede o postgres de iniciar.
Quando eu sudo cp -pr discourse/data/postgres discourse2/data/postgres eu obtenho exatamente o mesmo problema ao tentar iniciar o Discourse da pasta discourse2. Inversamente, quando eu deleto discourse/data/postgres minha instância original do Discourse inicia normalmente, mas sem dados, é claro
Desculpe pelo transtorno. Isso provavelmente ocorreu devido à recente atualização do PostgreSQL 15: PostgreSQL 15 update. Os arquivos de dados antigos do PG 13 são incompatíveis com a imagem discourse_dev, que agora executa o PG 15, mas nosso procedimento automatizado de atualização de banco de dados não foi projetado para ambientes de desenvolvimento.
Alguma razão específica pela qual você deseja reter os arquivos de dados antigos?
Você pode executar rake dev:populate dentro do contêiner para gerar alguns dados de teste.
Ah, isso faz muito sentido. Muito obrigado pela explicação. Aprendi hoje que é uma má ideia fazer um git pull cegamente no branch main, pois tanta coisa pode ser quebrada sem querer
Apenas por causa de algumas configurações de administrador, especificamente em relação ao Discourse Connect. Também algumas configurações da API REST, algumas configurações de Plugin e alguns grupos de usuários manuais específicos. Temos uma configuração SSO peculiar em vigor que gerencia categorias e grupos de usuários (+ associação de grupo) via API REST. O conteúdo real, como posts e respostas, não me importa em nada durante o desenvolvimento, é por isso que rake dev:populate não me ajudaria, presumo.
Muito obrigado pela sua resposta construtiva!
Isso será útil quando eu e meus colegas atualizarmos nossa instância local do Discourse para algo posterior a 3.4.0.
Por enquanto, no entanto, comecei com um novo conjunto de dados e reapliquei a configuração necessária. Felizmente, já tínhamos um guia interno escrito que instrui nossos colegas de desenvolvimento sobre como começar a desenvolver contra o Discourse