Postgres sembra non essere in esecuzione quando si avvia Discourse in locale con Docker

Per la mia azienda devo sviluppare alcune funzionalità per l’API REST della mia istanza Discourse. Per lo sviluppo e il test locale ho seguito con successo Install Discourse for development using Docker per un po’ di tempo.

Sono passate alcune settimane dall’ultima volta che ho sviluppato. Ieri volevo riavviare Discourse localmente, quindi ho eseguito il mio solito git pull && d/boot_dev && d/bundle install && d/rails s. Tuttavia, l’ultimo comando d/rails s fallisce con il seguente errore:

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'
[... ]

Quando apro un Terminale nel container discourse_dev ed eseguo un ls -la /var/run/postgresql/ vedo che effettivamente non c’è nessun socket .s.PGSQL.5432 qui.

Ok, quindi ho pensato che forse non avrei dovuto fare ciecamente un git pull per primo, quindi ho effettuato il checkout del tag v4.4.0 e persino del tag v3.3.0 e ho riprovato. Ma ottengo esattamente lo stesso errore.

Mi sembra che il database Postgres non sia in esecuzione all’interno del container discourse_dev?

La cosa strana è: se clono il repo discourse in una nuova cartella (sì, anche il codice più recente nel branch main) e avvio Discourse usando Docker, non ottengo questo errore e Discourse si avvia con successo. Ma ovviamente ho un database vuoto, il che è un po’ sfortunato. Capisco che i dati sono persistiti all’interno di tmp/postgres, che posso copiare dalla vecchia cartella a quella nuova. Ma non posso più farlo perché non lo sapevo ieri, e nei miei tentativi di risoluzione dei problemi di ieri ho cancellato ogni cartella temporanea e le cartelle node_modules e .pnpm-store e così via. Ma il problema persiste.

Qualcuno ha un’idea di cosa sta succedendo qui o cosa posso fare per risolvere questo problema?

Sembra che ci sia qualcosa di completamente rotto nei miei dati locali che impedisce l’avvio di postgres.

Quando eseguo sudo cp -pr discourse/data/postgres discourse2/data/postgres ottengo esattamente lo stesso problema tentando di avviare Discourse dalla cartella discourse2. Inversamente, quando elimino discourse/data/postgres la mia istanza originale di Discourse si avvia correttamente, ma ovviamente senza dati :frowning:

Mi dispiace per l’inconveniente. Questo è stato probabilmente dovuto al recente aggiornamento di PostgreSQL 15 update. I vecchi file di dati di PG 13 sono incompatibili con l’immagine discourse_dev che ora esegue PG 15, ma la nostra procedura automatizzata di aggiornamento del database non era intesa per ambienti di sviluppo.

C’è qualche motivo particolare per cui desideri conservare i vecchi file di dati?

Puoi eseguire rake dev:populate all’interno del container per generare alcuni dati di test.

1 Mi Piace

Non usare quella guida. Deve essere aggiornata o eliminata.

Usa questa: Developing Discourse using a Dev Container

2 Mi Piace

Oh, questo ha molto senso. Grazie mille per la spiegazione. Oggi ho imparato che è una cattiva idea fare un git pull alla cieca sul ramo main dato che così tante cose possono rompersi involontariamente :slight_smile:

Solo per alcune impostazioni di amministrazione, in particolare per quanto riguarda Discourse Connect. Anche alcune impostazioni dell’API REST, alcune impostazioni dei plugin e alcuni gruppi di utenti specifici manuali. Abbiamo una particolare configurazione SSO in atto che gestisce categorie e gruppi di utenti (+ appartenenza ai gruppi) tramite l’API REST. Il contenuto effettivo come post e risposte non mi interessa affatto durante lo sviluppo, motivo per cui rake dev:populate non mi sarebbe d’aiuto, presumo.

Nessun rancore qui.

Se il tuo sito di staging/produzione è già aggiornato a PG 15, puoi recuperare un backup da lì.

In alternativa, potresti provare ad aggiornare manualmente i tuoi file di dati locali. Questo potrebbe aiutare:

cd discourse
mkdir data/postgres_new
docker run --rm \
	--entrypoint=/bin/bash \
	-v "$(pwd)/data/postgres":/var/lib/postgresql/13/data \
	-v "$(pwd)/data/postgres_new":/var/lib/postgresql/15/data \
	tianon/postgres-upgrade:13-to-15 \
	-c "apt-get update && apt-get install -y postgresql-13-pgvector postgresql-15-pgvector &&
	docker-upgrade"
mv data/postgres data/postgres_old
mv data/postgres_new data/postgres
docker run --rm -v "$(pwd)/data/postgres":/postgres \
discourse/discourse_dev:release chown -R postgres:postgres /postgres

(Se stai usando un processore basato su ARM, dovrai creare la tua immagine.)

1 Mi Piace

Grazie mille per la tua risposta costruttiva!

Sarà utile quando io e i miei colleghi aggiorneremo la nostra istanza locale di Discourse a una versione successiva alla 3.4.0.

Per ora, tuttavia, ho iniziato con un nuovo set di dati e ho riapplicato la configurazione necessaria. Fortunatamente avevamo già una guida interna scritta che istruisce i nostri colleghi sviluppatori su come iniziare lo sviluppo contro Discourse :slight_smile:

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.