Createdb: Fehler: Datenbankerstellung fehlgeschlagen: FEHLER: Datenbank „discourse“ existiert bereits

Ich bin auf einen Fehler gestoßen, als ich Discourse zum ersten Mal auf meinem Server installiert habe
Ubuntu 22.04LTS
Discourse neueste GitHub-Version
2 GB RAM
2 GB Swap

Fehler


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

Grund

Dies ist meine erste Installation auf dem Server, aber ich habe die Anwendung wegen anderer Fehler mehrmals neu aufgebaut, wie z. B. My server can access github, but docker can't - #2 by whitewaterdeu
Ich weiß nicht, wann ich die Datenbank erstellt habe und wie ich das beheben kann.

Mein app.yml

root@cvm-3k8ngdw25i225:/var/discourse# cat containers/app.yml
## Dies ist die All-in-One-Standalone-Discourse-Docker-Container-Vorlage
##
## Nach Änderungen an dieser Datei MÜSSEN Sie neu erstellen
## /var/discourse/launcher rebuild app
##
## SEIEN SIE *SEHR* VORSICHTIG BEIM BEARBEITEN!
## YAML-DATEIEN SIND SUPER SUPER EMPFINDLICH GEGEN FEHLER BEI LEERZEICHEN ODER AUSRICHTUNG!
## Besuchen Sie http://www.yamllint.com/, um diese Datei nach Bedarf zu validieren.

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  # - "templates/web.china.template.yml"
  - "templates/web.template.yml"
  ## Kommentar entfernen, um den IPv6-Listener zu aktivieren
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## Kommentar entfernen, wenn Sie Lets Encrypt (https) hinzufügen möchten
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## Welche TCP/IP-Ports soll dieser Container bereitstellen?
## Wenn Discourse einen Port mit einem anderen Webserver wie Apache oder nginx teilen soll,
## siehe https://meta.discourse.org/t/17247 für Details
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Setzen Sie db_shared_buffers auf maximal 25% des Gesamtspeichers.
  ## wird automatisch von bootstrap basierend auf erkanntem RAM gesetzt, oder Sie können überschreiben
  db_shared_buffers: "256MB"

  ## kann die Sortierleistung verbessern, erhöht aber den Speicherverbrauch pro Verbindung
  #db_work_mem: "40MB"

  ## Welche Git-Revision soll dieser Container verwenden? (Standard: 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

  ## Wie viele gleichzeitige Webanfragen werden unterstützt? Hängt von Speicher und CPU-Kernen ab.
  ## wird automatisch von bootstrap basierend auf erkannten CPUs gesetzt, oder Sie können überschreiben
  UNICORN_WORKERS: 4

  ## TODO: Der Domainname, unter dem diese Discourse-Instanz erreichbar sein wird
  ## Erforderlich. Discourse funktioniert nicht mit einer reinen IP-Nummer.
  DISCOURSE_HOSTNAME: discuss.beginner.center

  ## Kommentar entfernen, wenn der Container mit demselben
  ## Hostnamen (-h Option) wie oben angegeben gestartet werden soll (Standard "hostname-config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Liste der per Komma getrennten E-Mails, die beim ersten Login Administrator und Entwickler werden
  ## Beispiel: 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'whitewatercn@outlook.com'

  ## TODO: Der SMTP-Mailserver, der zum Überprüfen neuer Konten und zum Senden von Benachrichtigungen verwendet wird
  # SMTP-ADRESSE, Benutzername und Passwort sind erforderlich
  # ACHTUNG: Das Zeichen '#' im SMTP-Passwort kann Probleme verursachen!
  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           # (optional, Standard true)
  DISCOURSE_SMTP_DOMAIN: mg.beinner.center
  DISCOURSE_NOTIFICATION_EMAIL: notification@mg.beinner.center

  ## Wenn Sie die Lets Encrypt-Vorlage hinzugefügt haben, entfernen Sie den Kommentar unten, um ein kostenloses SSL-Zertifikat zu erhalten
  LETSENCRYPT_ACCOUNT_EMAIL: notification@mg.beinner.center

  ## Die http- oder https-CDN-Adresse für diese Discourse-Instanz (konfiguriert zum Abrufen)
  ## siehe https://meta.discourse.org/t/14857 für Details
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## Der Maxmind Geolocation IP-Adressschlüssel für die IP-Adresssuche
  ## siehe https://meta.discourse.org/t/-/137387/23 für Details
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456
## Der Docker-Container ist zustandslos; alle Daten werden in /shared gespeichert
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Plugins hier einfügen
## siehe https://meta.discourse.org/t/19157 für Details
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Alle benutzerdefinierten Befehle, die nach dem Erstellen ausgeführt werden sollen
run:
  - exec: echo "Beginn der benutzerdefinierten Befehle"
  ## Wenn Sie die E-Mail-Adresse des Absenders für Ihre erste Registrierung festlegen möchten, kommentieren Sie die Zeile aus und ändern Sie sie:
  ## Nachdem Sie die erste Registrierungs-E-Mail erhalten haben, kommentieren Sie die Zeile wieder aus. Sie muss nur einmal ausgeführt werden.
  - exec: rails r "SiteSetting.notification_email='notification@mg.beinner.center'"
  - exec: echo "Ende der benutzerdefinierten Befehle"root@cvm-3k8ngdw25i225:/var/discourse# 

Gesamter Log

Das ist seltsam. Ich sehe nicht, wie das passieren könnte, da ein solcher Fehler beim Einchecken des Codes abgefangen werden sollte. Versuchen Sie es einfach noch einmal mit einem Neuaufbau.

Ich sehe, dass Sie den Tag unsupported-install gewählt haben, aber das sieht für mich wie eine Standardinstallation aus.

2 „Gefällt mir“

Danke für deine Antwort, Jay.
Ich habe die Fehlerzeile im gesamten Log durchsucht, vielleicht wird sie verursacht durch

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

Es ist meine erste Installation auf dem Server, aber ich habe die App wegen anderer Fehler viele Male neu erstellt, wie z. B. My server can access github, but docker can’t - #2 by whitewaterdeu
Ich weiß nicht, wann ich die Datenbank erstellt habe und wie ich das beheben kann.

Wenn Sie neu beginnen, können Sie

rm -rf shared/standalone

Sie werden wahrscheinlich auch auf Probleme mit der Ratenbegrenzung von Let’s Encrypt stoßen. Die einfachste Lösung ist, einen neuen Subdomain zu wählen, wenn Sie Ihre anderen Probleme gelöst haben.

Oh, jetzt sehe ich, dass die China-Web-Vorlage auskommentiert ist. Brauchen Sie die nicht?

1 „Gefällt mir“

Konnten Sie dieses Problem lösen? Ich habe einen ähnlichen Fehler.


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

Unser Skript funktionierte normal…

Dieser Fehler ist kein Problem, Sie können ihn ignorieren.

4 „Gefällt mir“