No se puede crear imagen web_only para una instalación nueva

Hola :blush:

Sigo intentando configurar nuestro pipeline para que funcione con Discourse.
Tengo un contenedor Redis fresco y un contenedor Postgres fresco para usar con Discourse.
El siguiente paso para mí es construir la imagen del contenedor web_only para luego conectarlos e iniciar la instalación, si no me equivoco, pero no puedo arrancar (bootstrap) el contenedor.

Estoy obteniendo este error:

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 ** por favor, desplázate hacia arriba y busca mensajes de error anteriores, puede haber más de uno.
./discourse-doctor puede ayudar a diagnosticar el problema.

Estoy confundido sobre por qué está intentando ejecutar migraciones cuando aún no he construido nada. ¿Estoy haciendo mal los pasos?
Este es el archivo web_only.yml que estoy usando (uno bastante básico):

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

¿Necesito tener un contenedor Postgres y un contenedor Redis activos y en ejecución cada vez que necesito realizar un bootstrap de una construcción? Pensé que podría preparar las imágenes para subirlas yo mismo y luego volver a ejecutar mis entornos con ellas sin necesidad de hacer nada en mi base de datos…

El pipeline que me pidieron construir es el siguiente:

  • Github Actions: que pueda realizar el bootstrap de la imagen en caso de que sea necesaria una actualización.
    • Empujar la imagen a un registro privado.
  • Luego, mi clúster de Kubernetes podría obtener las actualizaciones y desplegarlas en mis entornos, desde desarrollo hasta producción.

Gracias de nuevo por toda la ayuda y el apoyo. :sparkles:

Creo que el problema es que 127 no funciona dentro del contenedor. El proceso de arranque migra la base de datos. Si no deseas que se migre tu base de datos, necesitarás cambiar la plantilla o usar una base de datos temporal.

2 Me gusta

Gracias por tu respuesta :slight_smile: ¿Podrías decirme cómo evitar/omitir una migración de base de datos, por favor? Pensé que era con SKIP_POST_DEPLOYMENT_MIGRATIONS: 1

No puedo. Recomiendo que crees una base de datos temporal que destruyas después de la migración.

Y cuando lo hagas, deberás asegurarte de que todos esos pasos se ejecuten al desplegar la nueva imagen.

El punto es que no entiendo por qué se está ejecutando una migración de base de datos cuando no hay nada que migrar, ya que estoy creando mi primera imagen para una instalación nueva :frowning:

1 me gusta

La migración es un término técnico utilizado en el contexto de Rails. Las migraciones crean básicamente la estructura correcta de la base de datos.

2 Me gusta

Discourse no puede ejecutarse si la base de datos no está poblada con las tablas y los datos que requiere. También necesita precompilar los activos. Necesitarás entender cómo funcionan si vas a intentar implementarlo de otra manera.

1 me gusta

Gracias por aclarármelo. Pensé que la primera estructura de la base de datos podría crearse en el lanzamiento inicial del foro.

Muchas gracias por la respuesta. Seguiré pensando en esto. Parece que tal vez no sea posible preparar una pipeline de la manera que necesito. :frowning:

Sí, pero tendrías que hacerlo explícitamente. Y la forma más sencilla de construir la imagen es permitirle que migre una base de datos en blanco.

1 me gusta

Intentaré convencer a mi equipo de que solicite una base de datos Postgres temporal durante la pipeline de GitHub. Muchas gracias por toda la ayuda.

1 me gusta