Ich habe mich in unseren Codebase eingearbeitet und es sieht so aus, als wäre der Fehler relativ einfach, aber ich möchte meine Annahmen gerne verifizieren.
Wir haben eine Site-Einstellung namens slug_generation_method, die von dem Standardwert ascii auf encoded geändert werden muss, um diesen Fehler auszulösen. Wenn Sie diese Site-Einstellung ändern, löschen wir alle Slugs und generieren sie neu.
Was ich nicht verstehe, ist, warum wir, wenn die Site-Einstellung auf “encoded” gesetzt ist, einen Slug wie diesen generieren:
[3] pry(main)> SiteSetting.slug_generation_method
=> "encoded"
[4] pry(main)> Slug.for(t.slug)
=> "キノの旅-home-thread-intermediate-book-club"
wobei ich erwartet hätte, dass “encoded” so etwas bedeutet wie:
[5] pry(main)> CGI.escape(Slug.for(t.slug))
=> "%E3%82%AD%E3%83%8E%E3%81%AE%E6%97%85-home-thread-intermediate-book-club"
Dies scheint aus folgendem zu stammen:
Der Roh-Slug aus der Tabelle wird im Location-Header der 301-Antwort zurückgegeben, wenn ein Topic-Slug nicht übereinstimmt, und meiner Meinung nach sollten wir dort eine gültige URL zurückgeben.