こんにちは。
ユーザー(「リーダー」ロール)が新しいトピックを作成しようとすると、カテゴリが空白になり、トピック作成ボタンをクリックすると404エラーが発生します。
スタッフである私が新しいトピックを作成しようとすると、カテゴリは空白のままですが、「無効なパラメータがリクエストに渡されました: category」というエラーが表示されます。
設定を見つけました。
カテゴリなしでトピックを作成できるようにする。警告: カテゴリなしのトピックがある場合は、オフにする前に再分類する必要があります。
有効にした記憶はありませんが、有効になっています。デフォルトだと思いますが、確信はありません。
カテゴリなしのカテゴリ設定を確認しました。
このカテゴリは特別です。カテゴリが選択されていない新しいトピックのデフォルトカテゴリとして使用されます。この動作を防ぎ、カテゴリの選択を強制する場合は、こちらで設定を無効にしてください 。名前または説明を変更する場合は、カスタマイズ / テキストコンテンツ に移動してください。
当面、ユーザーが不快な経験をして投稿できないことを心配しています(404エラー)。
meta.discourse.orgで質問への回答を探しました。
質問1:新しいトピックを作成しようとすると、カテゴリフィールドが空白になるのはなぜですか? (meta.discourse.orgに投稿するときは空白ではありません)
質問2:「カテゴリなしでトピックを作成できるようにする」が有効になっている場合、なぜエラーが発生するのですか? (「カテゴリなし」は実際には「カテゴリなし」を意味すると思いますが、それは「カテゴリが選択されていない新しいトピックのデフォルトカテゴリ」と説明されています。
meta.discourse.orgの動作は気に入っています。カテゴリなしではなく「一般」にデフォルト設定されますが、どちらが正しいアプローチかわかりません。
a) 「カテゴリなし」を「一般」に名前変更する。(注:2016年の投稿で、これが悪いアイデアであり、「カテゴリなし」をデータベースの「null」と同等に扱っていることが示されていました。)
または
b) 「一般」カテゴリを作成し、すべてのカテゴリなしトピックを「一般」に移動し(方法?)、新しい投稿のデフォルトとして「一般」を設定し、「カテゴリなしでトピックを作成できるようにする」を無効にする。
アドバイスや関連ドキュメントへのポインタがあれば幸いです。
よろしくお願いいたします。
Stephen
追伸:ちなみに、私たちはOSSプロジェクトであり、これはhttps://www.discourse.orgの親切な人々によって提供された無料のDiscourseインスタンスです 。
MarcP
(MarcP)
2022 年 10 月 15 日午後 11:41
2
これも気づきました。しかし、未分類を無効にしましたが、その場合はトップカテゴリが選択されるはずです。デフォルトと同じ(空の)カテゴリフィールドが表示されています。
「いいね!」 1
@MarcPさん 、ありがとうございます!
これはバグかもしれないと思いますが、早計したくありませんでした。
Stephen
(Stephen)
2022 年 10 月 16 日午前 12:00
4
スティーブンさん
あなたのサイトはどのバージョンのDiscourseを実行していますか?
最近、「未分類」の「カテゴリ」が新しい一般的なカテゴリに置き換えられました。あなたのサイトにその名前の新しいカテゴリが表示されましたか?以前に一般的なカテゴリを持っていましたか?
MarcP
(MarcP)
2022 年 10 月 16 日午前 12:08
5
Stephen:
以前は一般的なカテゴリがありましたか?
はい、以前は一般的なカテゴリがありました。最新のビルドを実行していますが、数週間前から気づいています。
このコミットで修正されるはずでしたが、サイトにはすでに適用されているようです。
main ← general-delete
opened 06:35PM - 11 Oct 22 UTC
If the new seeded General category is deleted we also need to delete the
corresp… onding site setting for it so that we don't try and reference it.
This fixes a bug in the category dropdown composer.
This change creates the `clear_related_site_settings` after destroy
hook that could also be used by other features in the future, like maybe
when we have a `default_category_id` site_setting.
Looks like if `nil` out a site setting it is set to `0`?
```
[9] pry(main)> SiteSetting.general_category_id = nil
SiteSetting Load (0.4ms) SELECT "site_settings".* FROM "site_settings" WHERE "site_settings"."name" = 'general_category_id' LIMIT 1
=> nil
[10] pry(main)> SiteSetting.general_category_id
=> 0
```
That is why the tests check if the value is `< 1` and not `nil`.
すべてのケースをカバーできていない可能性があります。担当者が確認します。
「いいね!」 5
MarcP
(MarcP)
2022 年 10 月 16 日午前 5:13
10
うーん、allow uncategorized topics を有効にすると、カテゴリページに未分類カテゴリが表示されたままになります。一般カテゴリの名前を変更した後でもです。
Don
2022 年 10 月 16 日午前 8:12
11
Uncategorized カテゴリは、Discourse で General カテゴリが有効になって以降、デフォルトのサイト設定ではなくなりました。新しい Discourse のインストールでは、デフォルトで General カテゴリが用意されています。そのため、コンポーザーを開くと、自動的に General カテゴリが選択されます。しかし、General カテゴリがない古いインストールでは、任意のカテゴリを General カテゴリにすることができます。これは、この場合、コンポーザーのデフォルトカテゴリを意味するだけだと思います。そのため、General という名前のカテゴリを作成しても十分ではありません。非表示のサイト設定 general_category_id でカテゴリ ID を設定する必要があります。
例:
この General 目的で新しいカテゴリを作成する場合。カテゴリ名はたとえば General とし、カテゴリ ID も確認する必要があります。この例では 9 になります。
カテゴリは正常に作成されましたが、コンポーザーを開いてもデフォルトのカテゴリにならないため、非表示のサイト設定を設定しましょう。
category_id を General カテゴリに設定
注:category_id=9 は、この例でのみ正しいカテゴリ ID です。新しく作成したカテゴリには、おそらく異なる category_id 番号が付けられています。
cd /var/discourse
./launcher enter app
rails c
SiteSetting.general_category_id=9
exit
exit
これにより、コンポーザーを開くと category_id=9… General カテゴリがデフォルトになります。
「いいね!」 2
generalの名前は変更していません。「uncategorized」のみがあり、名前は変更していません。
Discourse updated: 14 hours ago
@Don
ありがとうございます。これはホストされたインスタンスなので、非表示のサイト設定を行うためのシェルアクセスを取得する方法はわかりません。
よろしくお願いいたします。
Stephen
「いいね!」 1
ほとんどのチームメンバーは週末ですが、誰かが利用可能になり次第、すぐに修正できます。
「いいね!」 4
混乱を最小限に抑えるために、念のため確認させてください。
準備として「一般」カテゴリを作成する必要がありますか?
設定変更後、「未分類」カテゴリのすべてのトピックを「一般」に移動する必要がありますか?
ご協力ありがとうございます。
Stephen
この結果を目指しているのであれば、#uncategorized の代わりに #general をデフォルトにするために、新しい #general カテゴリを作成し、バルクツールを使用して #uncategorized のすべてのトピックをそこに移動し、その後、管理設定で allow uncategorized topics を無効にすることをお勧めします(ただし、これによりドロップダウンは修正されません)。
ただし、これはチームメンバーが数分で修正できるものであり、非表示の general_category_id 設定を手動で更新することも含まれるため、待つだけでもよいでしょう。
「いいね!」 4
MarcP
(MarcP)
2022 年 10 月 16 日午後 6:20
19
ありがとうございます。この説明は非常に良く、解決できました。これはバグではないので、このトピックは#supportにあるべきだと思います。また、あなたの返信は解決策としてマークされるべきだと提案します。
「いいね!」 1
すべて解決しました。「未分類」の代わりに「一般」を使用するように変更したところ、システムがデフォルトのカテゴリを正しく提供するようになりました。
この問題を診断するのに協力してくれたすべての人に感謝します。特に、この問題を迅速かつプロフェッショナルに解決してくれた @fzngagan に感謝します。
敬具
Stephen
「いいね!」 5
blake
(Blake Erickson)
2022 年 10 月 18 日午後 7:06
31
この修正前に誤って「General」カテゴリを削除した方へ
committed 05:09PM - 12 Oct 22 UTC
* FIX: Reset related site settings on general category delete
If the new seed… ed General category is deleted we also need to delete the
corresponding site setting for it so that we don't try and reference it.
This fixes a bug in the category dropdown composer.
This change creates the `clear_related_site_settings` after destroy
hook that could also be used by other features in the future, like maybe
when we have a `default_category_id` site_setting.
Looks like if `nil` out a site setting it is set to `0`?
```
[9] pry(main)> SiteSetting.general_category_id = nil
SiteSetting Load (0.4ms) SELECT "site_settings".* FROM "site_settings" WHERE "site_settings"."name" = 'general_category_id' LIMIT 1
=> nil
[10] pry(main)> SiteSetting.general_category_id
=> 0
```
That is why the tests check if the value is `< 1` and not `nil`.
* Use -1 instead of nil because it is the default
存在しないカテゴリに SiteSetting.general_category_id が設定されている場合、それをクリーンアップする追加の修正が行われました。
main ← fix-general-category-id
opened 11:21PM - 17 Oct 22 UTC
On sites that were seeded with a general category id and that category
was delet… ed prior to the fix in efb116d2bd4d1e02df9ddf79316112e0555b4c1e
this migration will reset the SiteSetting.general_category_id back to
the default because there is no longer a corresponding category for it.
This is to fix a composer bug that occurs if there is a
SiteSetting.general_category_id value present that doesn't match an
existing category.
「いいね!」 3