Error de actualización de Discourse v3.0.6 a v3.1.1 - método no definido `register_bookmarkable' para Bookmark:Class

¿Has probado una nueva instalación sin restauración pero conectándote a tu base de datos backend existente?

Supongo que eso significa perder potencialmente cualquier configuración realizada en la interfaz de usuario que no se haya guardado en la base de datos. No estoy seguro de qué más se copia y restaura.

Quizás deberías considerar dejar Bitnami por una instalación estándar real. Tus problemas no son causados por “errores en la migración de la base de datos”, son específicos de Bitnami.

2 Me gusta

¿Ya existe una instalación estándar para Kubernetes?

¿Kubernetes permite hacer una instalación manual? Si es así, podrías hacer una instalación estándar de esa manera. (Nunca lo he intentado, así que no sé cómo funciona Kubernetes)

Te escucho alto y claro sobre las ventajas de la instalación estándar y la naturaleza independiente y no sancionada del gráfico Helm de Bitnami. No pretendía insinuar que la culpa recae en Discourse en sí. Mi elección de usar Bitnami sigue dependiendo de un cálculo que compara el costo de solucionar problemas con el gráfico de Bitnami y el costo de desarrollar mi propio gráfico Helm equivalente basado en la instalación compatible oficialmente y luego solucionar problemas con él.

Lo consideré, pero estoy tratando de evitar modificaciones en la configuración predeterminada del gráfico para mantenerme “en el camino principal”. Dicho esto, intenté actualizar solo el servidor de Discourse a la v3.2.0 anulando la etiqueta de la imagen de Deployment, mientras conservaba la base de datos existente, para ver si la migración tenía éxito; todavía falló.

He intentado eliminar y restaurar manualmente la base de datos a través de kubectl exec en el contenedor de postgres usando el archivo de volcado SQL generado por el propio Discourse, pero esto falla con el error sobre la tabla sidebar_sections. Más recientemente, creé una nueva VM y seguí el método de instalación estándar para instalar Discourse v3.3.0. Cuando intenté una restauración de copia de seguridad, ocurrió el mismo error.

Mi conclusión es que, aunque el archivo de copia de seguridad de producción fue generado por el propio Discourse, la estructura de la base de datos de mi instancia de producción v3.0.6 es de alguna manera diferente de lo que espera Discourse, lo que provoca errores en las migraciones. Si este es el caso, soy pesimista sobre mis opciones. La única idea que tengo en este momento es empezar a modificar el archivo de volcado SQL en el archivo de copia de seguridad para eliminar las tablas que causan los errores DuplicateTable en la etapa de migración de la base de datos del proceso de restauración.

Si desea utilizar los gráficos de Helm de Bitnami, debe utilizar su soporte.

1 me gusta

Con la esperanza de que esto salve a alguien de pasar horas como yo en esta situación, aquí está el proceso que finalmente me permitió actualizar de Discourse v3.0.6 a v3.2.0 en el contexto de usar el gráfico Helm de Bitnami (v11 a v12). Si bien más descargos de responsabilidad no deberían ser necesarios según los comentarios anteriores, este problema se debe a un error en el gráfico Helm de Bitnami y sus imágenes personalizadas; el problema no afecta a las versiones oficiales de Discourse.

Las instrucciones a continuación muestran cómo navegar por la actualización. El “sitio de producción” es una versión del gráfico Helm del sitio de Discourse que se está actualizando, y el “sitio de migración” se refiere a una versión temporal del gráfico implementada en paralelo en el espacio de nombres discourse-dev.

Sitio de producción

  1. Establezca el foro de producción en modo de solo lectura en el panel de administración de Copias de seguridad /admin/backups.
  2. Realice una copia de seguridad utilizando el panel de administración de Copias de seguridad. Descargue el archivo de copia de seguridad localmente.

Sitio de migración

  1. Instale una nueva instancia del gráfico Bitnami v12.6.2 (Discourse v3.2.0). Redimensione el despliegue del servidor Discourse a cero.

    $ kubectl scale -n discourse-dev deployment discourse --replicas 0
    deployment.apps/discourse scaled
    
  2. Cree el archivo SQL db_init.sql:

    cat > /tmp/db_init.sql << EOF
    DROP DATABASE bitnami_application;
    CREATE DATABASE bitnami_application;
    GRANT ALL PRIVILEGES ON DATABASE bitnami_application TO bn_discourse;
    CREATE EXTENSION hstore;
    CREATE EXTENSION pg_trgm;
    ALTER database bitnami_application owner to bn_discourse ;
    EOF
    
  3. Copie al pod de la base de datos y ejecute:

    $ kubectl cp -n discourse-dev db_init.sql discourse-dev-postgresql-0:/tmp/
    
    $ kubectl exec -n discourse-dev -it discourse-dev-postgresql-0 -- bash -c \
        'PGPASSWORD=$POSTGRES_PASSWORD psql -U postgres \
         < /tmp/db_init.sql'
    DROP DATABASE
    CREATE DATABASE
    GRANT
    ERROR:  extension "hstore" already exists
    ERROR:  extension "pg_trgm" already exists
    ALTER DATABASE
    
  4. Extraiga el archivo de copia de seguridad, copie el archivo de volcado SQL al pod de la base de datos y aplíquelo:

    $ ls
    discourse-2024-03-04-143102-v20230119094939.tar.gz
    $ tar xvf discourse-2024-03-04-143102-v20230119094939.tar.gz 
    $ gunzip dump.sql.gz 
    $ kubectl cp -n discourse-dev dump.sql discourse-dev-postgresql-0:/tmp/
    $ kubectl exec -n discourse-dev -it discourse-dev-postgresql-0 -- bash -c \
        'PGPASSWORD=$POSTGRES_PASSWORD psql -U bn_discourse \
         --dbname bitnami_application \
         < /tmp/dump.sql'
    
  5. Inicie el pod de Discourse.

    $ kubectl scale -n discourse-dev deployment discourse --replicas 1
    deployment.apps/discourse scaled
    
  6. Observe los registros y elimine las tablas que impiden la actualización:

    $ kubectl logs --prefix -f -n discourse-dev -c discourse -l app.kubernetes.io/name=discourse
    $ kubectl logs --prefix -f -n discourse-dev -l app.kubernetes.io/name=postgresql
    
  7. Observe mientras las migraciones de la base de datos fallan y elimine manualmente las tablas relevantes hasta que las migraciones tengan éxito:

    $ kubectl exec -n discourse-dev -it discourse-dev-postgresql-0 -- bash -c \
        'PGPASSWORD=$POSTGRES_PASSWORD psql -U bn_discourse --dbname bitnami_application -c "\
        DROP TABLE sidebar_sections; \
        DROP TABLE sidebar_urls; \
        DROP TABLE chat_threads; \
        DROP TABLE form_templates; \
        DROP TABLE category_settings; \
        DROP TABLE category_form_templates; \
        DROP TABLE theme_svg_sprites; \
        DROP TABLE user_chat_thread_memberships; \
        DROP TABLE summary_sections; \
        "'
    
  8. Restaure la copia de seguridad de la carpeta de subidas:

    $ PODNAME=$(kubectl get pod -n discourse-dev -l app.kubernetes.io/name=discourse --output=jsonpath={.items..metadata.name} | cut -f1 -d' ')
    $ kubectl cp -n discourse-dev -c discourse uploads $PODNAME:/bitnami/discourse/public/
    $ kubectl exec -n discourse-dev -c discourse $PODNAME -- bash -c 'chown -R 999:0 /bitnami/discourse/public/uploads/'
    
  9. Por alguna razón, los complementos no se descargaron e instalaron automáticamente. Haga esto manualmente y verifique la funcionalidad de los complementos.

    root@discourse-54c6d6fb7c-z9285:/bitnami/discourse/plugins$ git clone https://github.com/discourse/discourse-oauth2-basic
    root@discourse-54c6d6fb7c-z9285:/bitnami/discourse/plugins$ git clone https://github.com/discourse/discourse-math
    root@discourse-54c6d6fb7c-z9285:/bitnami/discourse/plugins$ chown -R 999:0 discourse-oauth2-basic discourse-math
    
  10. Cree una copia de seguridad del sitio recién restaurado utilizando el panel de administración de Copias de seguridad.

Sitio de producción

  1. Elimine el despliegue original y purgue los PV/PVC.
  2. Instale una nueva instancia del gráfico Bitnami v12.6.2 (Discourse v3.2.0).
  3. Use https://$BASE_URL/u/admin-login para iniciar sesión con un enlace por correo electrónico.
  4. Cargue y restaure el archivo de copia de seguridad utilizando el panel de administración de Copias de seguridad.
1 me gusta