Impossibile creare l'immagine web_only per un'installazione pulita

Ciao :blush:

Sto ancora cercando di configurare la nostra pipeline per funzionare con Discourse.
Ho un container Redis fresco e un container Postgres fresco da utilizzare con Discourse.
Il prossimo passo per me è costruire l’immagine del container web_only per poi collegarli e avviare l’installazione, se ho capito bene, ma non riesco ad eseguire il bootstrap del container.

Sto ricevendo questo errore:

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 ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.

Sono confuso sul perché stia tentando di eseguire le migrazioni quando non ho ancora costruito nulla. Sto sbagliando i passaggi?
Questo è il file web_only.yml che sto usando (uno piuttosto basilare):

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

Devo avere un container Postgres e un container Redis attivi e in esecuzione ogni volta che devo eseguire il bootstrap di una build? Pensavo di poter preparare le immagini per caricarle io stesso e poi rieseguire i miei ambienti con esse senza dover fare nulla al mio database…

La pipeline che mi è stato chiesto di costruire è:

  • Github actions: che possono eseguire il bootstrap dell’immagine nel caso in cui sia necessario un aggiornamento.
    • Spingere l’immagine su un registro privato.
  • Successivamente, il mio cluster Kubernetes potrebbe ottenere gli aggiornamenti e distribuirli nei miei ambienti, da dev a prod.

Grazie ancora per tutto l’aiuto e il supporto. :sparkles:

Penso che il problema sia che 127 non funziona all’interno del container. Il processo di avvio migra il database. Se non desideri migrare il tuo database, dovrai modificare il template o utilizzare un database di prova.

2 Mi Piace

Grazie per la tua risposta :slight_smile:
Puoi dirmi come evitare/saltare una migrazione del database, per favore? Pensavo fosse con SKIP_POST_DEPLOYMENT_MIGRATIONS: 1

Non posso. Ti consiglio di creare un database temporaneo da eliminare dopo la migrazione.

E quando lo farai, dovrai verificare che tutte quelle operazioni vengano eseguite al momento del deployment della nuova immagine.

Il punto è che non capisco perché ci sia una migrazione del database quando non c’è nulla da migrare, dato che sto creando la mia prima immagine per un’installazione pulita :frowning:

1 Mi Piace

La migrazione è un termine tecnico utilizzato nel contesto di Rails. Le migrazioni creano fondamentalmente la corretta struttura del database.

2 Mi Piace

Discourse non può essere eseguito se il database non è popolato con le tabelle e i dati necessari. È inoltre necessario precompilare le risorse. Dovrai comprendere come funzionano se intendi provare a distribuire in altro modo.

1 Mi Piace

Grazie per avermelo chiarito. Pensavo che la prima struttura del database potesse essere realizzata al primo lancio del forum.

Grazie mille per la risposta. Continuerò a pensarci. Sembra che forse non sia possibile preparare una pipeline nel modo in cui ne ho bisogno. :frowning:

È possibile, ma è necessario farlo esplicitamente. Il modo più semplice per creare l’immagine è lasciarla migrare un database di prova.

1 Mi Piace

Proverò a convincere il mio team a richiedere un database Postgres temporaneo durante la pipeline di GitHub, allora. Grazie mille per tutto l’aiuto.

1 Mi Piace