# Tentative de recréation du canal de discussion supprimé avec le même nom (toujours) échoue

**URL:** https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747
**Category:** Bug
**Tags:** chat
**Created:** [Février 10, 2023, 10:31 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747 "2023-02-10T10:31:27Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![pacharanero](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pacharanero/32/500583_2.png) [@pacharanero](https://meta.discourse.org/u/pacharanero)
#### Post date: [Février 10, 2023, 10:31 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/1 "2023-02-10T10:31:28Z")

</div>

Continuant la discussion de [Tentative de recréer un canal de chat supprimé avec le même nom échoue](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-same-name-fails/248870) :

Ce bug a été signalé dans le fil de discussion lié mais semble toujours persister pour moi. Je suis sur la dernière version, j’ai fait un `git pull` et reconstruit le lanceur hier.

Lorsque j’essaie de nommer un nouveau canal de chat avec un nom de canal de chat précédemment utilisé, il y a une erreur 500 dans la console JS.

Dans les journaux d’erreurs de Discourse, j’obtiens :

```txt
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.

```

Dans la console Rails, je peux voir que les `ChatChannels` supprimés ont disparu, mais je soupçonne que quelque part le slug supprimé reste dans un index ou dans une autre dépendance de la base de données et n’a pas été supprimé.

> [@mcwumbly](#):
>
> Solution de contournement :
> 
> 1. Créez un nouveau canal avec un nom différent (par exemple, “foo2”)
> 2. Modifiez le canal et définissez le nom sur “foo”

Cette solution de contournement ne fonctionne pas pour moi, lorsque j’essaie de renommer “foo2” en “foo”, j’obtiens la même erreur 500, en raison de la contrainte d’unicité échouée sur le slug.

Je ne suis pas sûr de la manière de supprimer en toute sécurité les slugs (indexés ?) des `ChatChannels` supprimés, mais je serais prêt à essayer.

* * *

Possiblement lié : ce problème qui affecte également les slugs, mais il ne semble pas s’agir du même problème : [Attempt to recreate deleted chat channel with same name fails](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-same-name-fails/248870?u=pacharanero)

---

<div class="post-metadata">

### Author: ![mcwumbly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mcwumbly/32/103861_2.png) [@mcwumbly](https://meta.discourse.org/u/mcwumbly)
#### Post date: [Février 10, 2023, 6:10 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/2 "2023-02-10T18:10:14Z")

</div>

Je viens de tester ce qui suit et je n’ai eu aucun problème :

1. Créer un canal nommé «&nbsp;whiskers&nbsp;» avec le slug «&nbsp;whiskers&nbsp;»
2. Supprimer le canal
3. Créer un canal nommé «&nbsp;whiskers&nbsp;» avec le slug «&nbsp;whiskers&nbsp;»

Cela a fonctionné.

Lorsque le canal est supprimé (étape 2), le slug est automatiquement modifié pour quelque chose d’unique. Mais comme vous avez supprimé votre canal avant l’introduction de cette modification, l’ancien slug pourrait encore traîner.

Vous pouvez probablement mettre à jour manuellement le slug du canal supprimé via la console Rails, mais je ne suis pas sûr de la bonne formule. Je vais me renseigner.

Notez également que les slugs de canal peuvent désormais être modifiés indépendamment du nom du canal, donc comme solution de contournement, vous pourriez également créer aujourd’hui un canal avec le nom souhaité et choisir un slug différent qui ne pose pas de conflit.

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [Février 10, 2023, 6:25 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/4 "2023-02-10T18:25:51Z")

</div>

C’est très inattendu.

> [@pacharanero](#):
>
> Dans la console Rails, je peux voir que les ChatChannels supprimés ont disparu

Nous ne supprimons pas les canaux, nous les supprimons uniquement de manière logique. Ils devraient donc toujours être là avec la colonne `deleted_at` remplie.

Si vous exécutez ceci dans votre console, vous n’obtenez aucun résultat ?

```ruby
ChatChannel.find_by(slug: "sec-fhir")

```

---

<div class="post-metadata">

### Author: ![pacharanero](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pacharanero/32/500583_2.png) [@pacharanero](https://meta.discourse.org/u/pacharanero)
#### Post date: [Février 10, 2023, 7:19 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/5 "2023-02-10T19:19:11Z")

</div>

> [@j.jaffeux](#):
>
> Si vous exécutez ceci dans votre console, vous n’obtenez aucun résultat ?

```plaintext
[1] pry(main)> ChatChannel.find_by(slug: "sec-fhir")
=> nil

```

---

<div class="post-metadata">

### Author: ![pacharanero](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pacharanero/32/500583_2.png) [@pacharanero](https://meta.discourse.org/u/pacharanero)
#### Post date: [Février 10, 2023, 7:25 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/6 "2023-02-10T19:25:20Z")

</div>

> [@mcwumbly](#):
>
> Je viens de tester ce qui suit et je n’ai eu aucun problème :
> 
> 1. Créer un canal avec le nom «&nbsp;whiskers&nbsp;» et le slug «&nbsp;whiskers&nbsp;»
> 2. Supprimer le canal
> 3. Créer un canal avec le nom «&nbsp;whiskers&nbsp;» et le slug «&nbsp;whiskers&nbsp;»

Je peux confirmer que ce test fonctionne également pour moi sur mon instance, qui est entièrement à jour.

Je pense que le problème est qu’il y a quelque part dans la base de données un slug qui traîne et qui aurait dû être supprimé, mais qui ne l’a pas été. Il y a peut-être eu un bug dans une **version précédente** qui est maintenant corrigé. Le chat n’est activé sur cette instance que depuis 17 jours, donc tout bug aurait dû être actif dans ce laps de temps.

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [Février 11, 2023, 6:48 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/7 "2023-02-11T06:48:45Z")

</div>

Impossible de reproduire cela de quelque manière que ce soit. Après avoir effectué une sauvegarde de la base de données, vous pourrez peut-être essayer ceci dans la console Rails. Cela semble surprenant cependant.

```plaintext
[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);")

```

---

<div class="post-metadata">

### Author: ![martin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martin/32/491371_2.png) [@martin](https://meta.discourse.org/u/martin)
#### Post date: [Février 15, 2023, 1:24 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/8 "2023-02-15T01:24:56Z")

</div>

J’ai vérifié et c’est en fait ce à quoi il fallait s’attendre, car nous excluons les enregistrements avec `deleted_at` rempli même avec `find_by` :

```plaintext
ChatChannel.find_by(slug: "sec-fhir")
  ChatChannel Load (0.4ms) SELECT "chat_channels".* FROM "chat_channels" WHERE "chat_channels"."deleted_at" IS NULL AND "chat_channels"."slug" = 'sec-fhir' LIMIT 1
=> nil

```

Vous devrez faire ceci à la place (en ajoutant `with_deleted`) :

```plaintext
ChatChannel.with_deleted.find_by(slug: "sec-fhir")
  ChatChannel Load (0.3ms) SELECT "chat_channels".* FROM "chat_channels" WHERE "chat_channels"."slug" = 'sec-fhir' LIMIT 1
=> #<CategoryChannel:0x00007fc9bfb4abf0
 id: 124,
 chatable_id: 19,
 deleted_at: Wed, 15 Feb 2023 01:19:20.982181000 UTC +00:00,
 deleted_by_id: nil,
 featured_in_category_id: nil,
 delete_after_seconds: nil,
 chatable_type: "Category",
 created_at: Fri, 13 Jan 2023 01:46:43.730329000 UTC +00:00,
 updated_at: Wed, 15 Feb 2023 01:19:56.427647000 UTC +00:00,
 name: "test channel",
 description: "",
 status: "archived",
 user_count: 1,
 last_message_sent_at: Fri, 13 Jan 2023 01:46:51.130903000 UTC +00:00,
 auto_join_users: false,
 user_count_stale: false,
 slug: "sec-fhir",
 type: "CategoryChannel",
 allow_channel_wide_mentions: true,
 messages_count: 0,
 threading_enabled: false>

```

Donc, pour nettoyer l’ancien slug de canal supprimé, faites quelque chose comme ceci :

```ruby
channel = ChatChannel.with_deleted.find_by(slug: "sec-fhir")
channel.update!(slug: "#{channel.deleted_at.strftime("%Y%m%d-%H%M")}-#{channel.slug}-deleted")

```

Peut-être avons-nous besoin d’une migration pour corriger cela @mcwumbly et @j.jaffeux ?

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [Février 15, 2023, 9:28 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/9 "2023-02-15T09:28:37Z")

</div>

Ah oui, c’est vrai, j’avais oublié le `with_deleted` dans ce cas 👍

Je suggère que nous laissions votre réponse ici pour l’instant. Cela devrait être un cas rare : supprimé avant la correction + volonté de recréer avec le même nom.

---

<div class="post-metadata">

### Author: ![pacharanero](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pacharanero/32/500583_2.png) [@pacharanero](https://meta.discourse.org/u/pacharanero)
#### Post date: [Février 22, 2023, 12:43 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/10 "2023-02-22T12:43:12Z")

</div>

Merci pour ce qui précède. Je ne connaissais pas `with_deleted` mais cela m’a permis de voir les instances supprimées et de renommer leurs slugs comme dans votre extrait.

Je peux confirmer que cela est corrigé. Je suis d’accord avec @j.jaffeux sur le fait que cela n’affecte probablement pas beaucoup d’utilisateurs, donc je dirais qu’il suffit qu’une correction dans la console Rails soit présente dans le fil de discussion.

---

<div class="post-metadata">

### Author: ![martin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martin/32/491371_2.png) [@martin](https://meta.discourse.org/u/martin)
#### Post date: [Février 22, 2023, 10:02 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/11 "2023-02-22T22:02:04Z")

</div>

Excellent, content de savoir que cela a résolu votre problème Marcus. Je ferme ce sujet maintenant.

---

<div class="post-metadata">

### Author: ![martin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martin/32/491371_2.png) [@martin](https://meta.discourse.org/u/martin)
#### Post date: [Février 22, 2023, 10:02 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/12 "2023-02-22T22:02:07Z")

</div>



---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [Juin 23, 2023, 10:34 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/13 "2023-06-23T22:34:38Z")

</div>



---

<div class="post-metadata">

### Author: ![MarcP](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/marcp/32/160184_2.png) [@MarcP](https://meta.discourse.org/u/MarcP)
#### Post date: [Juin 23, 2023, 9:47 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/14 "2023-06-23T21:47:59Z")

</div>

Lorsque j’essaie de créer un nouveau canal (nommé « general », même chose pour le slug), l’erreur suivante s’affiche dans les logs (rien ne se passe côté frontend).

Aucun canal « Fermé » n’est affiché.

J’ai peut-être eu un canal general par le passé - et l’ai probablement supprimé (est-ce par défaut ?)

Impossible de reproduire avec un autre slug aléatoire (créer \> supprimer \> recréer fonctionne très bien).

```plaintext
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)=(general) already exists.

```

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [Juin 23, 2023, 10:36 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/15 "2023-06-23T22:36:44Z")

</div>

J’ai déplacé votre publication ici pour que les rapports restent groupés. 👍

La solution de contournement ci-dessus conviendrait-elle également dans votre cas ?

---

<div class="post-metadata">

### Author: ![MarcP](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/marcp/32/160184_2.png) [@MarcP](https://meta.discourse.org/u/MarcP)
#### Post date: [Juin 23, 2023, 11:09 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/16 "2023-06-23T23:09:45Z")

</div>

La solution de contournement dans le message initial, non, n’a pas fonctionné.

Ceci ne semble pas non plus avoir fonctionné pour moi.

```plaintext
[1] pry(main)> ChatChannel.find_by(slug: "general")
NameError: uninitialized constant ChatChannel
from (pry):1:in ` __pry__'

```

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [Juin 24, 2023, 3:34 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/17 "2023-06-24T03:34:50Z")

</div>

> [@MarcP](#):
>
> La solution de contournement dans le premier message n’a pas fonctionné.

La solution de contournement pour le problème des OPs se trouve dans ce message :

> [@Attempt to recreate deleted chat channel with the same name (still) fails](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/8?u=jammydodger):
>
> I checked and this is actually expected, since we exclude records with deleted\_at filled in even with find\_by: ChatChannel.find\_by(slug: "sec-fhir") ChatChannel Load (0.4ms) SELECT "chat\_channels".\* FROM "chat\_channels" WHERE "chat\_channels"."deleted\_at" IS NULL AND "chat\_channels"."slug" = 'sec-fhir' LIMIT 1 =\> nil You will need to do this instead (adding with\_deleted): ChatChannel.with\_deleted.find\_by(slug: "sec-fhir") ChatChannel Load (0.3ms) SELECT "chat\_channels".\* FROM "chat\_chann…

---

<div class="post-metadata">

### Author: ![MarcP](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/marcp/32/160184_2.png) [@MarcP](https://meta.discourse.org/u/MarcP)
#### Post date: [Juin 27, 2023, 1:44 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/18 "2023-06-27T13:44:39Z")

</div>

J’ai essayé ceux-ci, c’est ce dont parlait mon bloc de code partagé.

> [@MarcP](#):
>
> Cela ne semble pas non plus avoir fonctionné pour moi.
> 
> ```plaintext
> [1] pry(main)> ChatChannel.find_by(slug: "general")
> NameError: uninitialized constant ChatChannel
> from (pry):1:in ` __pry__'
> 
> ```

Je n’ai pas réussi à exécuter ces commandes dans rails.

Peut-être que je fais quelque chose de mal ici ?

EDIT : pour être clair, la solution de contournement suggérée génère la même erreur lors de la recherche du canal

```plaintext
[7] pry(main)> ChatChannel.with_deleted.find_by(slug: "general")
NameError: uninitialized constant ChatChannel
from (pry):7:in ` __pry__'

```

---

<div class="post-metadata">

### Author: ![MarcP](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/marcp/32/160184_2.png) [@MarcP](https://meta.discourse.org/u/MarcP)
#### Post date: [Juin 27, 2023, 11:45 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/20 "2023-06-27T23:45:26Z")

</div>

Bien, j’ai réussi à résoudre le problème (du moins, je le pense).

Pour moi, cela a été un peu compliqué de tout comprendre, alors je vais partager les étapes complètes.

```js
cd /var/discourse & ./launcher enter app
rails c
DB.exec("UPDATE chat_channels SET slug = 'new' WHERE slug = 'old';")

```

Donc, dans votre console Rails, cela ressemblera à ceci :

```js
[1] pry(main)> DB.exec("UPDATE chat_channels SET slug = 'new' WHERE slug = 'old';")
=> 1
[2] pry(main)> exit
root@discourse-app:~# exit
logout
➜ discourse git:(main) ✗

```

Je suis maintenant capable de créer un nouveau canal avec le slug souhaité.

Est-ce la bonne façon (ou une bonne façon) de faire ?

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [Juin 29, 2023, 5:28 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/22 "2023-06-29T05:28:13Z")

</div>

La solution de contournement ci-dessus échoue en raison d’un espace de noms que nous avons introduit il y a quelques semaines. ChatChannel est maintenant Chat::Channel.

---

<div class="post-metadata">

### Author: ![MarcP](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/marcp/32/160184_2.png) [@MarcP](https://meta.discourse.org/u/MarcP)
#### Post date: [Juin 30, 2023, 7:09 UTC](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747/23 "2023-06-30T07:09:45Z")

</div>

Je m’attendais à quelque chose comme ça mais je n’ai pas pu le trouver. J’espère que mon changement de base de données est également une bonne solution de contournement ? Jusqu’à présent, aucun problème.

[Next page](https://meta.discourse.org/t/attempt-to-recreate-deleted-chat-channel-with-the-same-name-still-fails/254747.md?page=2)
