Createdb: errore: creazione database fallita: ERRORE: database "discourse" esiste già

Ho riscontrato un errore durante la prima installazione di discourse sul mio server
Ubuntu 22.04LTS
Versione GitHub più recente di Discourse
2 GB di RAM
2 GB di swap

errore

2023-06-08 01:19:04.972 UTC [55] postgres@template1 ERROR: database "discourse" already exists
2023-06-08 01:19:04.972 UTC [55] postgres@template1 STATEMENT: CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR: database "discourse" already exists
I, [2023-06-08T01:19:04.977485 #1] INFO -- : 
I, [2023-06-08T01:19:04.978414 #1] INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
2023-06-08 01:19:05.654 UTC [59] postgres@discourse ERROR: role "discourse" already exists
2023-06-08 01:19:05.654 UTC [59] postgres@discourse STATEMENT: create user discourse;
ERROR: role "discourse" already exists

motivo

è la mia prima installazione sul server, ma ho ricostruito l’app molte volte a causa di altri errori come My server can access github, but docker can't - #2 by whitewaterdeu
non so quando ho creato il database e come risolverlo

il mio app.yml

## questo è il template del container Docker standalone all-in-one di Discourse
##
## Dopo aver apportato modifiche a questo file, DEVI ricostruire
## /var/discourse/launcher rebuild app
##
## FAI *MOLTA* ATTENZIONE QUANDO EDITI!
## I FILE YAML SONO SUPER SUPER SENSIBILI A ERRORI DI SPAZIATURA O ALLINEAMENTO!
## visita http://www.yamllint.com/ per validare questo file se necessario

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  # - "templates/web.china.template.yml"
  - "templates/web.template.yml"
  ## Decommenta la riga successiva per abilitare l'ascoltatore IPv6
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## Decommenta queste due righe se desideri aggiungere Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## quali porte TCP/IP dovrebbe esporre questo container?
## Se vuoi che Discourse condivida una porta con un altro webserver come Apache o nginx,
## vedi https://meta.discourse.org/t/17247 per i dettagli
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Imposta db_shared_buffers a un massimo del 25% della memoria totale.
  ## verrà impostato automaticamente da bootstrap in base alla RAM rilevata, o puoi sovrascriverlo
  db_shared_buffers: "256MB"

  ## può migliorare le prestazioni di ordinamento, ma aumenta l'utilizzo della memoria per connessione
  #db_work_mem: "40MB"

  ## Quale revisione Git dovrebbe usare questo container? (default: tests-passed)
  #version: tests-passed

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## Quante richieste web concorrenti sono supportate? Dipende dalla memoria e dai core della CPU.
  ## verrà impostato automaticamente da bootstrap in base alle CPU rilevate, o puoi sovrascriverlo
  UNICORN_WORKERS: 4

  ## TODO: Il nome di dominio a cui risponderà questa istanza di Discourse
  ## Obbligatorio. Discourse non funzionerà con un semplice numero IP.
  DISCOURSE_HOSTNAME: discuss.beginner.center

  ## Decommenta se vuoi che il container venga avviato con lo stesso
  ## hostname (-h opzione) specificato sopra (default "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Elenco di email separate da virgola che diventeranno amministratori e sviluppatori
  ## alla prima registrazione, esempio 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'whitewatercn@outlook.com'

  ## TODO: Il server di posta SMTP utilizzato per convalidare nuovi account e inviare notifiche
  # Sono richiesti INDIRIZZO SMTP, nome utente e password
  # ATTENZIONE il carattere '#' nella password SMTP può causare problemi!
  DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: notification@mg.beinner.center
  DISCOURSE_SMTP_PASSWORD: "my smtp password"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opzionale, default true)
  DISCOURSE_SMTP_DOMAIN: mg.beinner.center
  DISCOURSE_NOTIFICATION_EMAIL: notification@mg.beinner.center

  ## Se hai aggiunto il template Lets Encrypt, decommenta sotto per ottenere un certificato SSL gratuito
  LETSENCRYPT_ACCOUNT_EMAIL: notification@mg.beinner.center

  ## L'indirizzo CDN http o https per questa istanza di Discourse (configurato per il pull)
  ## vedi https://meta.discourse.org/t/14857 per i dettagli
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## La chiave dell'indirizzo IP di geolocalizzazione maxmind per la ricerca dell'indirizzo IP
  ## vedi https://meta.discourse.org/t/-/137387/23 per i dettagli
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## Il container Docker è stateless; tutti i dati sono memorizzati in /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## I plugin vanno qui
## vedi https://meta.discourse.org/t/19157 per i dettagli
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Qualsiasi comando personalizzato da eseguire dopo la build
run:
  - exec: echo "Inizio comandi personalizzati"
  ## Se vuoi impostare l'indirizzo email 'Da' per la tua prima registrazione, decommenta e cambia:
  ## Dopo aver ricevuto la prima email di registrazione, ri-commenta la riga. Deve essere eseguita solo una volta.
  - exec: rails r "SiteSetting.notification_email='notification@mg.beinner.center'"
  - exec: echo "Fine comandi personalizzati"
root@cvm-3k8ngdw25i225:/var/discourse# 

log completo

È strano. Non capisco come possa succedere, dato che un errore del genere dovrebbe essere intercettato al momento del commit del codice. Potresti semplicemente provare a ricompilare.

Vedo che hai scelto il tag unsupported-install, ma a me sembra un’installazione standard.

2 Mi Piace

Grazie per la tua risposta, Jay.
Ho cercato la riga di errore in tutto il log, forse è causata da

2023-06-08 01:19:04.972 UTC [55] postgres@template1 ERROR:  database "discourse" already exists
2023-06-08 01:19:04.972 UTC [55] postgres@template1 STATEMENT:  CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR:  database "discourse" already exists
I, [2023-06-08T01:19:04.977485 #1]  INFO -- : 
I, [2023-06-08T01:19:04.978414 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
2023-06-08 01:19:05.654 UTC [59] postgres@discourse ERROR:  role "discourse" already exists
2023-06-08 01:19:05.654 UTC [59] postgres@discourse STATEMENT:  create user discourse;
ERROR:  role "discourse" already exists

È la mia prima installazione sul server, ma ho ricostruito l’app molte volte a causa di altri errori come Il mio server può accedere a GitHub, ma Docker no - #2 di whitewaterdeu
Non so quando ho creato il database e come risolverlo.

Se stai iniziando da zero, puoi
rm -rf shared/standalone
È probabile che incontrerai anche problemi con il limite di frequenza di Let’s Encrypt. La soluzione più semplice è scegliere un nuovo sottodominio quando avrai risolto gli altri problemi.
Oh, ora vedo il template web China commentato. Non ti serve?

1 Mi Piace

Sei riuscito a risolvere questo problema? Ho un errore simile.


I, [2023-07-12T20:27:26.203859 #1]  INFO -- : > su postgres -c 'createdb discourse' || true
2023-07-12 20:27:26.398 UTC [55] postgres@postgres ERROR:  database "discourse" already exists
2023-07-12 20:27:26.398 UTC [55] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR:  database "discourse" already exists
I, [2023-07-12T20:27:26.423480 #1]  INFO -- : 
I, [2023-07-12T20:27:26.423858 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
2023-07-12 20:27:26.599 UTC [59] postgres@discourse ERROR:  role "discourse" already exists
2023-07-12 20:27:26.599 UTC [59] postgres@discourse STATEMENT:  create user discourse;
ERROR:  role "discourse" already exists

Il nostro script stava funzionando normalmente…

Questo errore non è un problema, puoi ignorarlo.

4 Mi Piace