Este error se informó en el hilo vinculado, pero parece que todavía persiste para mí. Estoy en la última versión, hice un git pull y reconstruí el lanzador ayer.
Al intentar nombrar un nuevo canal de chat con el nombre de cualquier canal de chat utilizado anteriormente, hay un error 500 en la consola de JavaScript.
En los registros de errores de Discourse, obtengo:
Failed to handle exception in exception app middleware : ActiveRecord::RecordNotUnique : PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_chat_channels_on_slug"
DETAIL: Key (slug)=(sec-fhir) already exists.
En la consola de Rails, puedo ver que los ChatChannels eliminados se han ido, pero sospecho que en algún lugar el slug eliminado permanece en un índice o en alguna otra dependencia de la base de datos y no se ha eliminado.
Esta solución alternativa no funciona para mí; al intentar renombrar “foo2” a “foo”, obtengo el mismo error 500, debido a la restricción de unicidad fallida en el slug.
No estoy seguro de cómo eliminar de forma segura los slugs (¿indexados?) de los ChatChannels eliminados, pero estaría dispuesto a intentarlo.
Acabo de probar lo siguiente y no tuve ningún problema:
Crear canal con nombre “whiskers” y slug “whiskers”
Eliminar canal
Crear canal con nombre “whiskers” y slug “whiskers”
Eso funcionó.
Cuando se elimina el canal (paso 2), el slug se cambia automáticamente a algo único. Pero como eliminaste tu canal antes de que se introdujera ese cambio, es posible que el slug antiguo todavía esté presente.
Probablemente puedas actualizar manualmente el slug del canal eliminado a través de la consola de Rails, pero no estoy seguro de cuál es la sintaxis correcta. Preguntaré.
Tenga en cuenta también que ahora los slugs de los canales se pueden editar independientemente del nombre del canal, por lo que, como solución alternativa, también podría crear un canal con el nombre deseado hoy y elegir un slug diferente que no entre en conflicto.
Confirmo que esta prueba también funciona para mí en mi instancia, que está completamente actualizada.
Creo que el problema es que en algún lugar de la base de datos hay algún slug pendiente que debería haber sido eliminado, pero no lo fue, tal vez hubo un error en una versión anterior que ahora está corregido. El chat solo se ha habilitado en esta instancia durante 17 días, por lo que cualquier error tendría que haber estado activo en ese período de tiempo.
No puedo reproducir esto de ninguna manera. Después de hacer una copia de seguridad de la base de datos, quizás puedas probar esto en la consola de Rails. Parece sorprendente, sin embargo.
[1] pry(main)> DB.exec("DROP INDEX IF EXISTS index_chat_channels_on_slug;")
[2] pry(main)> DB.exec("CREATE UNIQUE INDEX index_chat_channels_on_slug ON chat_channels(slug);")
Gracias por lo anterior. No sabía sobre with_deleted, pero eso me permitió ver las instancias eliminadas y renombrar sus slugs según tu fragmento.
Confirmo que esto está solucionado. Estaría de acuerdo con @j.jaffeux en que es poco probable que esto afecte a muchos usuarios, así que diría que es suficiente que haya una solución de consola de Rails en el hilo.