rake migrate를 방해하는 요소를 확인하는 방법?

멀티사이트를 시도하고 있습니다. 두 번째 인스턴스를 설치했고 잘 작동합니다.

하지만 이제 빌드를 다시 생성할 수 없습니다. 로그에는 다음과 같이 표시됩니다:

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 inc
orrect 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 #<Pro
cess::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:
migrate'"]}
bootstrap failed with exit code 1

플러그인 없이 시도해 봤지만 여전히 깨져 있습니다. 앱은 시작할 수 있지만 빌드를 다시 생성할 수는 없습니다.

Discourse Chatbot :robot: (ChatGPT 지원) 플러그인을 설치하셨나요?

네, 그리고 그때 삭제하려고 했어요 (멀티사이트에서 플러그인을 수동으로 선택하지 않으면 테스트할 수 없다는 걸 확인했거든요).

그 오류는 해당 플러그인에서 발생하며, 플러그인을 제거해도 데이터베이스에 추가된 내용은 영구적이므로 데이터베이스 레코드를 수동으로 수정하고 중복 항목을 제거해야 합니다.

감사합니다. 제가 찾는 것이 맞는지 확인해 주실 수 있을까요?

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:

음, 아마도 수십 번의 설치가 있었고, 내가 아는 한 이런 종류의 문제가 없었어야 합니다.

구체적인 문제는 무엇인가요?

픽스처 스크립트는 봇 사용자를 시드합니다(관리자가 rails 콘솔을 실행할 필요가 없도록 하기 위해서)가, 두 번 시도하면 실패할 수 있습니다. 다만 그에 대한 체크가 있습니다. 이 체크가 완벽하게 견고한지 확인해 보겠습니다. 이 설치 방식에서는 두 번 실행되고 있나요?

인덱스를 삭제해서는 안 됩니다!

중복된 레코드만 삭제하면 됩니다.

user_id가 -4이고 category_id가 9인 두 번째 레코드를 찾아서 해당 id를 사용하여 삭제하세요.

위험한 작업이므로 먼저 다음을 실행하여 확인하세요:

SELECT FROM category_users WHERE id = <두 번째 id>;

이 쿼리가 레코드 1개만 반환하는지 확인한 후, 다음을 실행하세요:

DELETE FROM category_users WHERE id = <두 번째 id>;

봇에 대해 어떤 변경 사항을 했는지 기억하시나요?

참고로, 이 문제가 해결되면 플러그인을 제거할 필요가 없다고 생각합니다. 하지만 왜 이런 상황이 처음부터 발생했는지에 대해 매우 궁금합니다. 다른 보고가 없었거든요?

로버트, 감사합니다. 저는 분명히 DB 전문가가 아니어서 질문드렸고, 참고로 백업은 이미 가지고 있습니다. 하지만 의도적으로 잘못된 일을 하는 것보다는 항상 더 나은 방법을 찾는 게 좋으니까요 :smiling_face_with_sunglasses:

봇은 제가 수정한 것이 아니지만, 모든 그룹에서 기본 카테고리를 사용하는데, 이렇게 하면 구현이 깨지는 것 같습니다.

메타 포럼에 더 많은 정보가 있습니다. 이 문제를 찾아내고, 유사한 문제를 방지하기 위해 몇 가지 체크를 추가해 주실 수 있기를 바랍니다:

아니, 아마 전부 내 탓은 아닌 것 같네 :sweat_smile: