Web_only-Image für eine Neuinstallation kann nicht erstellt werden

Hallo :blush:

Ich versuche immer noch, unsere Pipeline so einzurichten, dass sie mit Discourse funktioniert. Ich habe einen frischen Redis-Container und einen frischen Postgres-Container für die Verwendung mit Discourse.
Der nächste Schritt für mich ist, das Image des web_only-Containers zu bauen, um sie dann zu verbinden und die Installation zu starten, wenn ich recht habe. Allerdings kann ich den Container nicht bootstrappen.

Ich erhalte diesen Fehler:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 4632 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
0e576a9672a887d23579100756224f920ab595b819874b5e7cbe4868f4234481
** FAILED TO BOOTSTRAP ** bitte scrollen Sie nach oben und suchen Sie nach früheren Fehlermeldungen, es kann mehr als eine geben.
./discourse-doctor kann helfen, das Problem zu diagnostizieren.

Ich bin verwirrt, warum versucht wird, eine Migration durchzuführen, obwohl noch nichts gebaut wurde. Mache ich die Schritte falsch?
Dies ist das web_only.yml, das ich verwende (ein ziemlich einfaches):

templates:
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
env:
  LANG: en_US.UTF-8
  UNICORN_WORKERS: 2
  DISCOURSE_DB_USERNAME: root
  DISCOURSE_DB_PASSWORD: my-secret-pw
  DISCOURSE_DB_HOST: 127.0.0.1
  DISCOURSE_DB_NAME: communities
  DISCOURSE_DEVELOPER_EMAILS: 'email@mail.com'
  DISCOURSE_HOSTNAME: 'localhost'
  DISCOURSE_REDIS_HOST: 127.0.0.1
  SKIP_POST_DEPLOYMENT_MIGRATIONS: 1
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - mkdir -p plugins
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-voting.git
          - git clone https://github.com/discourse/discourse-slack-official.git
          - git clone https://github.com/discourse/discourse-assign.git
run:
  - exec:
      cd: /var/www/discourse
      cmd:
        - sed -i 's/GlobalSetting.serve_static_assets/true/' config/environments/production.rb
        - bash -c "touch -a /shared/log/rails/{sidekiq,puma.err,puma}.log"
        - bash -c "ln -s /shared/log/rails/{sidekiq,puma.err,puma}.log log/"
        - sed -i 's/default \$scheme;/default https;/' /etc/nginx/conf.d/discourse.conf

Muss ich jedes Mal, wenn ich einen Build bootstrappen muss, einen Postgres- und einen Redis-Container laufen haben? Ich dachte, ich könnte die Images vorbereiten, um sie selbst hochzuladen, und dann meine Umgebungen damit neu starten, ohne etwas an meiner Datenbank ändern zu müssen…

Die Pipeline, die ich bauen sollte, ist:

  • Github Actions: die das Image bootstrappen können, falls ein Update erforderlich ist.
    • Das Image in eine private Registry pushen.
  • Dann kann mein Kubernetes-Cluster Updates erhalten und sie in meinen Umgebungen von dev bis prod bereitstellen.

Nochmals vielen Dank für all die Hilfe und Unterstützung. :sparkles:

Ich glaube, dein Problem ist, dass 127 im Container nicht funktioniert. Der Bootstrap-Prozess migriert die Datenbank. Wenn du die Datenbank nicht migrieren möchtest, musst du die Vorlage ändern oder eine leere Datenbank verwenden.

2 „Gefällt mir“

Vielen Dank für deine Antwort :slight_smile:
Kannst du mir bitte sagen, wie man eine Datenbankmigration vermeidet/überspringt? Ich dachte, das geht über SKIP_POST_DEPLOYMENT_MIGRATIONS: 1

Das kann ich nicht. Ich empfehle dir, eine temporäre Datenbank zu erstellen, die du nach der Migration wieder löschst.

Und wenn du das tust, musst du sicherstellen, dass all diese Schritte ausgeführt werden, wenn du das neue Image deployst.

Der Punkt ist, dass ich nicht verstehe, warum eine Datenbankmigration stattfindet, wenn nichts zu migrieren ist, da ich mein erstes Image für eine Neuinstallation erstelle :frowning:

1 „Gefällt mir“

Migration ist ein technischer Begriff, der im Zusammenhang mit Rails verwendet wird. Migrationen erstellen im Wesentlichen die korrekte Datenbankstruktur.

2 „Gefällt mir“

Discourse kann nicht ausgeführt werden, wenn die Datenbank nicht mit den erforderlichen Tabellen und Daten gefüllt ist. Außerdem müssen die Assets vorab kompiliert werden. Wenn Sie versuchen, Discourse auf andere Weise bereitzustellen, müssen Sie verstehen, wie diese Prozesse funktionieren.

1 „Gefällt mir“

Danke für die Klarstellung. Ich dachte, die erste Datenbankstruktur könnte beim ersten Start des Forums erstellt werden.

Vielen Dank für die Antwort. Ich werde weiter darüber nachdenken. Es scheint, dass es vielleicht nicht möglich ist, eine Pipeline so vorzubereiten, wie ich es brauche. :frowning:

Das ist möglich, aber Sie müssen dies explizit durchführen. Der einfachste Weg, das Image zu erstellen, besteht darin, es eine leere Datenbank migrieren zu lassen.

1 „Gefällt mir“

Ich werde versuchen, mein Team zu überzeugen, während der GitHub-Pipeline vorübergehend eine Postgres-Datenbank anzufordern. Vielen Dank für die ganze Hilfe.

1 „Gefällt mir“