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
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.
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
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.
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