Discourse Assign: error que está derribando el sitio

Recientemente cambié la configuración del sitio para el/los grupo(s) que pueden usar Discourse Assign. Algo salió terriblemente mal al pulsar el botón de actualizar; el sitio entero se cayó.

Desde entonces he desactivado Discourse Assign, lo que ha permitido que el sitio vuelva a estar en línea, pero no logro que Discourse Assign funcione de nuevo. Cuando lo vuelvo a activar, el sitio se cae y no puedo cambiar la configuración del sitio para el plugin Discourse Assign.

Estoy revisando los registros de error; hay dos:

ActiveRecord::StatementInvalid (PG::InvalidTextRepresentation: ERROR:  sintaxis de entrada no válida para entero: "patently-staff"
LINE 1: ...RE "group_users"."user_id" = 1 AND (groups.id in ('patently-...
                                                             ^
: SELECT  1 AS one FROM "groups" INNER JOIN "group_users" ON "groups"."id" = "group_users"."group_id" WHERE "group_users"."user_id" = 1 AND (groups.id in ('patently-staff')) LIMIT 1)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.0.2/lib/patches/db/pg.rb:69:in `async_exec_params'

Y:

Failed to handle exception in exception app middleware : PG::InvalidTextRepresentation: ERROR:  sintaxis de entrada no válida para entero: "patently-staff"
LINE 1: ...RE "group_users"."user_id" = 1 AND (groups.id in ('patently-...
                                                             ^
: SELECT  1 AS one FROM "groups" INNER JOIN "group_users" ON "groups"."id" = "group_users"."group_id" WHERE "group_users"."user_id" = 1 AND (groups.id in ('patently-staff')) LIMIT 1

¿Está el plugin discourse-assign actualizado en tu instancia? ¿O tal vez hiciste un fork del plugin hace un tiempo? Hubo un cambio en el plugin discourse-assign en julio que parece relevante para los errores que estás viendo.

2 Me gusta

Hola Penar, estoy bastante seguro de que estaba actualizado; actualizo todo regularmente, incluidos los plugins.

Creo que tendré que restaurar; la última copia de seguridad fue antes de cambiar esa configuración del sitio.

Hola @jerry0,

Según los registros, parece que el plugin está actualizado. ¿Qué versión de Discourse estás ejecutando?

2 Me gusta

última, actualmente 2.4.0.beta4

Vale, entiendo. ¿Cambió la configuración antes o después de actualizar a beta4?

Parece que nuestra migración automática no logró actualizar su configuración por alguna razón; voy a investigar por qué ocurrió esto. ¿Probó reiniciar el servidor antes de habilitar el plugin, por si acaso el valor antiguo podría haberse almacenado en caché? Avíseme si esto no funciona y le proporcionaré un script en Ruby para solucionar el problema manualmente.

1 me gusta

Gracias @Roman

Sucedió antes de que yo actualizara. Algo extraño ocurrió cuando añadí la nueva configuración; creo que pulsé la marca de verificación verde antes de “añadir” el nuevo nombre de grupo.

No estoy seguro de cómo hacerlo (por cierto, es posible que me haya expresado mal al decir “desactivado/activado” en mi mensaje original: lo que quise decir fue que comenté la URL de git clone en el archivo app.yml para añadir el plugin). Cuando añado el plugin en el archivo yml, el sitio se bloquea inmediatamente (y antes estaba habilitado), así que no puedo entrar y luego configurarlo como desactivado… a menos que haya malinterpretado su mensaje?

Es muy probable que sea necesario; lo agradecería mucho.

Si no te importa, me gustaría validar una cosa más antes de modificar manualmente la configuración.

¿Podrías ejecutar este código en una consola de Rails y decirme el resultado?

DB.query_single(<<~SQL
  SELECT site_settings.value FROM site_settings WHERE site_settings.name = 'assign_allowed_on_groups'
SQL
).first.to_s.split('|')

Esto debería indicarnos si fallamos al migrar el valor de la configuración.

Para acceder a una consola:

  • cd en tu carpeta de Discourse
  • Entra en el contenedor ejecutando ./launcher enter app
  • Abre una consola de Rails ejecutando rails c
3 Me gusta

la respuesta es

=> [“patently-staff”]

1 me gusta

Gracias, Jerry.

Definitivamente hay algo ocurriendo aquí. Lo revisaré para ver por qué está sucediendo.

Aquí está el script:


group_id = Group.where(name: 'patently-staff').pluck(:id).join('|')

DB.exec("UPDATE site_settings SET value='#{group_id}' WHERE site_settings.name = 'assign_allowed_on_groups'")

Después de ejecutarlo, deberías poder volver a habilitar el plugin.

7 Me gusta

Perfecto, eso funcionó :grin: Gracias @Roman. Avísame si hay algo más que pueda proporcionar para ayudar.

1 me gusta

Hola Roman,

Tenemos un problema similar con el plugin discourse-assign en nuestro sitio después de actualizar a la versión 2.4.0beta4.

El problema solo aparece en los usuarios que inician sesión mediante LDAP. (Utilizamos “GitHub - jonmbake/discourse-ldap-auth: Discourse plugin to enable LDAP/Active Directory authentication. · GitHub” para la conexión LDAP).

La respuesta a la consulta DB.query es:
=> [“staff”]
pero “Group.where(name: ‘staff’).pluck(:id).join(‘|’)” devuelve “”.

Por cierto: En la versión “2.4.0.beta1 +203” las respuestas son similares, pero el inicio de sesión mediante LDAP es posible. (versión de LDAP 0.4.0, versión de assign 0.1).

Cualquier ayuda será bienvenida.

Gracias,
Frank

Hola @diwr,

Según esa consulta, no tienes un grupo llamado staff. ¿Quizás lo renombraste a otra cosa?

Puedes verificarlo ejecutando: Group.where(id: 3).pluck(:name)

Creo que la migración no funcionará si el grupo staff fue renombrado. Lo revisaré hoy.

2 Me gusta

Gracias @Roman

Parece que fue renombrado a “equipo”.
¿Qué hacemos ahora?

Puedes ejecutar el script usando “team” como nombre del grupo.

4 Me gusta

@Roman
Muchas gracias.
Tuve que ejecutar “./launcher rebuild app” después de establecer el valor, pero luego funcionó.

6 Me gusta