¿Cómo reconectarse a la cabeza después de lidiar previamente con una actualización fallida?

Tuve algunos problemas hace varios meses y finalmente tuve que volver a 2.9.0.beta1 y simplemente no pude actualizar más en ese momento.

Debido a diversas circunstancias atenuantes, tuve que abandonar este proyecto por un tiempo y ahora puedo volver a él. Descubrí que el problema de raíz resultó ser que el servidor de base de datos PostgreSQL no se había actualizado de manera suficiente y adecuada, esto ahora se ha resuelto y se está ejecutando en PostgresQL 14.x y Discourse también se está ejecutando en esta versión de la base de datos ahora.

Desafortunadamente, cuando intenté actualizar nuevamente a través de la interfaz de usuario de actualización web normal, indicó que fatal: HEAD does not point to a branch (error completo aquí):

fatal: HEAD does not point to a branch
Docker Manager: FAILED TO UPGRADE
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:203:in `run'
...

Pensé que quizás podría hacer un /var/discourse/launcher rebuild app, pero tampoco funcionó y solo resultó en que la misma versión se iniciara de nuevo, pero noté la siguiente salida:

$ ./launcher rebuild app
x86_64 arch detected.

WARNING: We are about to start downloading the Discourse base image
This process may take anywhere between a few minutes to an hour, depending on your network speed

Please be patient

2.0.20220818-0047: Pulling from discourse/base
1efc276f4ff9: Pull complete
1b880e64942b: Pull complete
794f6dc9a2ff: Pull complete
Digest: sha256:7734701087766821ffb2ddcef423754798bd345c2ac0d550131c6e6905c268e8
Status: Downloaded newer image for discourse/base:2.0.20220818-0047
docker.io/discourse/base:2.0.20220818-0047
...
I, [2022-09-13T02:09:12.828649 #1]  INFO -- : Replacing # redis with sv start redis || exit 1 in /etc/service/unicorn/run
I, [2022-09-13T02:09:12.829826 #1]  INFO -- : > cd /var/www/discourse/plugins && git clone https://github.com/discourse/docker_manager.git
Cloning into 'docker_manager'...
I, [2022-09-13T02:09:13.957219 #1]  INFO -- :
I, [2022-09-13T02:09:13.958187 #1]  INFO -- : > cd /var/www/discourse && git fetch --depth=1 origin tag v2.9.0.beta2 --no-tags
From https://github.com/discourse/discourse
 * [new tag]           v2.9.0.beta2 -> v2.9.0.beta2
I, [2022-09-13T02:09:18.214516 #1]  INFO -- :
I, [2022-09-13T02:09:18.215535 #1]  INFO -- : > cd /var/www/discourse && git checkout v2.9.0.beta2
Note: switching to 'v2.9.0.beta2'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -
Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 88a85843 FIX: Cooking custom emojis should not use a secure URL (#15929)
I, [2022-09-13T02:09:19.557296 #1]  INFO -- :
...

Terminé revirtiendo estos cambios restaurando una copia de seguridad y pensé que debería pedir alguna opinión aquí primero sobre cómo podría y debería reconectar Discourse correctamente a HEAD en main y comenzar a construir nuevamente con la beta más reciente, y luego, después de que finalmente actualice esto, me gustaría fijarlo en una actualización de lanzamiento estable en el futuro. Había usado betas para resolver un problema que tuve este último año, pero esta ha sido una aventura suficiente para mí. :laughing:

¿Quieres que Discourse haga copias de seguridad? Necesitarás idear cómo actualizar las cosas de postgres dentro del contenedor para usar pg14. Si no es demasiado tarde para volver a PG 13, estarás más feliz si lo haces.

Simplemente deberías hacer una reconstrucción desde la línea de comandos.

Hmm, tengo un par de ideas, @pfaffman:

  • Gracias por señalarlo. Me enfoqué tanto en actualizar PGSQL que olvidé que necesitaba pasar a la versión 13 en lugar de la 14. ¡Creo que voy a llorar!
  • ¿Has visto a alguien degradar con éxito una base de datos de la versión 14 a la 13?
  • En teoría, debería poder agregar otro clúster para la versión 13 al servidor para que se ejecuten tanto la 13 como la 14, pero estoy bastante comprometido con la 14 ahora, ya que varios otros servicios también se ejecutan en el mismo servidor y simplemente no puedo manipularlos más, así que mi única esperanza es instalar una instancia de la versión 13 y DEGRADAR la de Discourse…
  • Intenté el comando de reconstrucción, pero simplemente no funcionó. Te refieres a lo que compartí anteriormente, ¿verdad?: /var/discourse/launcher rebuild app,

Esa salida contiene una "Nota", pero no es un error. Deberías esperar el mensaje de "cabeza desprendida" cada vez que extraigas una versión que no sea la más reciente.

1 me gusta

Sé exactamente cómo te sientes.

Esa no es mi área de especialización. Es mucho más fácil actualizar el contenedor para que tenga herramientas pg14. Siempre y cuando no quieras restaurar en un sitio pg13, estarás bien.

¿Cómo es que no funcionó? Y si esto está en tu servidor de producción, quizás quieras hacer esto primero en un servidor de prueba.