Spostamento del postgres db al server db centrale: build error

Ciao,
Sto attualmente migrando da una classica configurazione a due container (container web_only e data separati) a una configurazione in cui il database è ospitato su un server di database centrale (non all’interno di un container Docker).

Il database centrale è stato creato dal dump.sql che fa parte del file di backup. Il file web_only.yaml di Docker Compose utilizza

connettersi al database PostgreSQL centrale

DISCOURSE_DB_SOCKET: ‘’
DISCOURSE_DB_USERNAME: discourse
DISCOURSE_DB_PASSWORD: xxxx
DISCOURSE_DB_HOST: 10.10.10.xx
DISCOURSE_DB_NAME: discourse

Durante la build di web_only ricevo il seguente errore:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 741 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

L’host del database è accessibile con questi dati. Qualche idea su cosa sta succedendo qui? La stessa build con il container di database standard termina con successo.

Sei sicuro che il database remoto sia disponibile dal server? Sembra di no. Puoi fare il telnet alla porta del database dalla macchina del web server?

Ciao Jay,

Ho seguito il thread di Falco su Configure Discourse to use a separate PostgreSQL server Il server del database è disponibile dalla VM:

root@docker2:/var/discourse# pg_isready -d discourse -h 10.10.10.18 -p 5432 -U discourse    
10.10.10.18:5432 - Connessioni accettate

(connessioni accettate)

Anche il nome del database, l’utente e la password in web_only.yml sono corretti. L’errore di compilazione è

FALLITO
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' fallito con ritorno #<Process:
:Status: pid 829 exit 1>
Posizione del fallimento: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec fallito con i parametri {\"cd\"=>\"$home\", \"hook\"=>\"db_migrate\", \"cmd\"=>[\"su discourse -c 'bundle exec rake db:migra
te'\"]}
bootstrap fallito con codice di uscita 1

Non sono un esperto di Ruby, quindi avrei bisogno di aiuto per il debug a partire dall’errore che appare qui.

Ciao, Thommie

In tal caso:

Quali plugin hai? Hai il plugin AI?

Che versione di postgres stai eseguendo?

  • PostgreSQL 13.12
  • nessun plugin AI
  • plugin:
cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-shared-edits.git
          - git clone https://github.com/discourse/discourse-chat-integration
          - git clone https://github.com/discourse/wp-discourse
          - git clone https://github.com/discourse/discourse-openid-connect
          - git clone https://github.com/discourse/discourse-calendar
          - git clone https://github.com/discourse/discourse-data-explorer
          - git clone https://github.com/paviliondev/discourse-events
          - git clone https://github.com/paviliondev/discourse-locations
          - git clone https://github.com/discourse/discourse-reactions
          - git clone https://github.com/discourse/discourse-chat
          - git clone https://github.com/discourse/discourse-voting.git
          - git clone https://github.com/discourse/discourse-user-notes.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-footnote.git
          - git clone https://github.com/discourse/discourse-docs.git
          - git clone https://github.com/discourse/discourse-docs-card-filter.git
          - git clone https://github.com/discourse/discourse-assign.git
          - git clone https://github.com/discourse/discourse-templates.git
          - git clone https://github.com/discourse/discourse-saved-searches.git
          - git clone https://github.com/discourse/discourse-tooltips
          - git clone https://github.com/nathan-nz/discourse-wikified-posts
          - git clone https://github.com/discourse/discourse-post-voting.git
          - git clone https://github.com/discourse/discourse-encrypt.git
          - git clone https://github.com/discourse/discourse-zoom.git
          - git clone https://github.com/discourse/discourse-spoiler-alert.git
          - git clone https://github.com/discourse/discourse-category-experts.git

Puoi

?

Il messaggio di errore esatto nel backtrace ci dirà esattamente qual è il problema :smile:

Il tuo piano è di abbandonare il container dati?

1 Mi Piace

codice di errore:

> FAILED
> --------------------
> Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate' fallito con ritorno #<Process::Status: pid 816 exit 1>
> Posizione del fallimento: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
> exec fallito con i parametri {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
> bootstrap fallito con codice di uscita 1

Nel nuovo sistema i dati dovranno provenire dal database centrale anziché dal database docker, se possibile.

Mi chiedo se impostare questo valore su vuoto anziché non impostato causerà problemi.

In ogni caso, pubblica l’output completo.

1 Mi Piace

il log di build completo dopo

./launcher rebuild web_only

web_only_build.zip (9.4 KB)

lo yaml

web_only.zip (2.4 KB)

Per quanto riguarda DISCOURSE_DB_SOCKET: ‘’: poiché utilizziamo una connessione remota, suppongo che il valore del socket non sia rilevante in entrambi i casi (dati dockered o dati remoti)

1 Mi Piace

L’errore era più indietro nel log di build:

…
docker_manager è già alla versione compatibile più recente
wp-discourse è già alla versione compatibile più recente

I, [2023-11-10T21:08:17.388213 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
Il nome del plugin è 'discourse-topic-voting', ma la directory del plugin si chiama 'discourse-voting'
rake aborted!
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  permission denied for table users (ActiveRecord::StatementInvalid)

Quindi buone notizie! Si sta connettendo correttamente, sono i permessi del DB che devono essere modificati.

2 Mi Piace

Hmmmm, strano, l’utente del database discourse ha

postgres=# GRANT ALL ON DATABASE discourse TO discourse;

sul server postgres centrale. Abbiamo bisogno di altro per questo ruolo?

Ciò non influisce sulle tabelle esistenti.

A prima vista, forse:

ALTER DATABASE "discourse" OWNER TO "discourse";

o:

ALTER DEFAULT PRIVILEGES IN SCHEMA "public" GRANT ALL ON TABLES TO "discourse";

I log di postgres dovrebbero anche dirti più in dettaglio quali operazioni stanno fallendo.

4 Mi Piace

… ok ok, sembra che abbia ancora alcuni problemi di permessi qui, vedi /var/log/postgresql/postgresql-13-main.log:

2023-11-10 22:07:58.371 UTC [196127] postgres@postgres STATEMENT:  ALTER DEFAULT PRIVILEGES IN SCHEMA 'public' GRANT ALL ON TABLES TO 'discourse';
2023-11-10 22:10:18.270 UTC [196160] discourse@discourse ERROR:  permission denied for table site_settings
2023-11-10 22:10:18.270 UTC [196160] discourse@discourse STATEMENT:  SELECT name, data_type, value FROM site_settings
2023-11-10 22:10:18.313 UTC [196160] discourse@discourse ERROR:  permission denied for table users
2023-11-10 22:10:18.313 UTC [196160] discourse@discourse STATEMENT:  SELECT COUNT(*) FROM (SELECT 1 AS one FROM "users" LIMIT 20) subquery_for_count

OK, come sempre, era un problema di “livello 8” :smiling_face_with_tear:
Ho già avuto un database discourse in postgres, ma l’utente/ruolo discourse non aveva tutti i privilegi richiesti su di esso. E mi sono sfuggite alcune importanti differenze “comportamentali” tra mariadb e postgres…

Ora ho ricreato tutto: utente, database, permessi per l’utente/ruolo (incluso ALTER DEFAULT PRIVILEGES FOR ROLE discourse IN SCHEMA public GRANT ALL ON TABLES TO “discourse”; per gestire le tabelle create da questo utente in futuro)

La build è terminata e l’istanza funziona bene con il server postgres remoto, quindi è pronta per importare il backup dalla vecchia istanza.

4 Mi Piace

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