rake migrate を妨げているものを確認する方法

マルチサイトを試しています。2番目のインスタンスをインストールしましたが、問題なく動作しました。

しかし、今は再構築ができません。ログには次のように表示されます。

warning " > babel-plugin-debug-macros@0.4.0-pre1" has unmet peer dependency "@babel/core@^7.0.0".
warning "workspace-aggregator-ffab61d1-8b70-4cda-8f38-dde575adc062 > discourse > @uppy/xhr-upload@3.1.0" has incorrect peer dependency "@uppy/core@^3.0.6".
PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "idx_category_users_user_id_category_id"
DETAIL:  Key (user_id, category_id)=(-4, 9) already exists
Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 695 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:\nmigrate'"]}
bootstrap failed with exit code 1

プラグインなしでも試しましたが、まだ壊れています。アプリは起動できますが、再構築できません。

Discourse Chatbot :robot: (ChatGPT対応) をインストールしましたか?

はい、そしてマルチサイトでプラグインを手動で選択しないとテストできないことに気づいたので、アンインストールしようとしました。

そのエラーはそれによって発生しています。プラグインをアンインストールした後でも、データベースレコードを手動で修正し、重複を削除する必要があります。なぜなら、プラグインがデータベースに追加したものは永続的だからです。

「いいね!」 2

ありがとうございます。それが探しているものか確認していただけますか?

discourse=# \d category_users
                                            Table "public.category_users"
       Column       |            Type             | Collation | Nullable |                  Default                   
--------------------+-----------------------------+-----------+----------+--------------------------------------------
 id                 | integer                     |           | not null | nextval('category_users_id_seq'::regclass)
 category_id        | integer                     |           | not null | 
 user_id            | integer                     |           | not null | 
 notification_level | integer                     |           | not null | 
 last_seen_at       | timestamp without time zone |           |          | 
Indexes:
    "category_users_pkey" PRIMARY KEY, btree (id)
    "idx_category_users_category_id_user_id" UNIQUE, btree (category_id, user_id)
    "index_category_users_on_user_id_and_last_seen_at" btree (user_id, last_seen_at)

DROP INDEX idx_category_users_category_id_user_id を試しましたが、正確なコマンドをいただけると大変助かります :slight_smile:

うーん、おそらく何十ものインストールがあり、私が知る限りこのような問題はありません。

具体的にどのような問題ですか?

フィクスチャスクリプトはボットユーザーにシードを設定します(管理者がレールコンソールを操作する必要がないようにするため)。これは2回試行すると失敗する可能性がありますが、チェックがあります。チェックが爆弾プルーフかどうかを確認します。このインストールの種類で2回実行されていますか?

インデックスを削除してはいけません!

重複レコードを削除するだけで済みます。

user_id-4category_id9 の 2 番目のレコードを見つけ、その id を使用して削除してください。

これは危険な操作なので、まず次で確認してください。

SELECT FROM category_users WHERE id = <2番目のid>;

レコードが 1 件だけ返されることを確認してから、次を実行してください。

DELETE FROM category_users WHERE id = <2番目のid>;

ボットに関してどのような変更を加えたか覚えていますか?

「いいね!」 3

追加で、これが解決したらプラグインを削除する必要はないと思いますが、そもそもなぜこのシナリオが発生したのか非常に興味があります。他に報告はありませんでしたか?

ロバートさん、ありがとうございます。私はDBの専門家ではないので、バックアップはありますが、わざと間違ったことをしない方が良いと思ったので質問しました :smiling_face_with_sunglasses:

ボットは私によって変更されていませんが、すべてのグループでデフォルトのカテゴリを使用しており、それがあなたの実装を壊しているようです。

Metaにはさらに情報があります。この問題を見つけて、問題を回避するためのチェックを追加していただけると幸いです。

「いいね!」 2

まあ、完全に私のせいではないかもしれません😅

「いいね!」 2