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

**URL:** https://meta.discourse.org/t/how-to-check-what-prevents-rake-migrate/258047
**Category:** Self-hosting
**Created:** [3월 14, 2023, 2:20오전 UTC](https://meta.discourse.org/t/how-to-check-what-prevents-rake-migrate/258047 "2023-03-14T02:20:54Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![satonotdead](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/satonotdead/32/447830_2.png) [@satonotdead](https://meta.discourse.org/u/satonotdead)
#### Post date: [3월 14, 2023, 2:20오전 UTC](https://meta.discourse.org/t/how-to-check-what-prevents-rake-migrate/258047/1 "2023-03-14T02:20:54Z")

</div>

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

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

```plaintext
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".

```

```plaintext
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

```

```plaintext
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

```

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

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [3월 14, 2023, 2:27오전 UTC](https://meta.discourse.org/t/how-to-check-what-prevents-rake-migrate/258047/2 "2023-03-14T02:27:45Z")

</div>

[Discourse Chatbot 🤖 (ChatGPT 지원)](https://meta.discourse.org/t/discourse-chatbot-supporting-chatgpt/256652) 플러그인을 설치하셨나요?

---

<div class="post-metadata">

### Author: ![satonotdead](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/satonotdead/32/447830_2.png) [@satonotdead](https://meta.discourse.org/u/satonotdead)
#### Post date: [3월 14, 2023, 2:33오전 UTC](https://meta.discourse.org/t/how-to-check-what-prevents-rake-migrate/258047/3 "2023-03-14T02:33:59Z")

</div>

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

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [3월 14, 2023, 2:38오전 UTC](https://meta.discourse.org/t/how-to-check-what-prevents-rake-migrate/258047/4 "2023-03-14T02:38:45Z")

</div>

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

---

<div class="post-metadata">

### Author: ![satonotdead](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/satonotdead/32/447830_2.png) [@satonotdead](https://meta.discourse.org/u/satonotdead)
#### Post date: [3월 14, 2023, 2:50오전 UTC](https://meta.discourse.org/t/how-to-check-what-prevents-rake-migrate/258047/5 "2023-03-14T02:50:31Z")

</div>

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

```plaintext
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`를 시도해 보았지만, 여기서는 정확한 명령어가 필요할 것 같습니다 🙂

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [3월 14, 2023, 7:21오전 UTC](https://meta.discourse.org/t/how-to-check-what-prevents-rake-migrate/258047/6 "2023-03-14T07:21:56Z")

</div>

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

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

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

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [3월 14, 2023, 7:27오전 UTC](https://meta.discourse.org/t/how-to-check-what-prevents-rake-migrate/258047/7 "2023-03-14T07:27:22Z")

</div>

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

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

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

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

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

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

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

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

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [3월 14, 2023, 7:54오전 UTC](https://meta.discourse.org/t/how-to-check-what-prevents-rake-migrate/258047/8 "2023-03-14T07:54:20Z")

</div>

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

---

<div class="post-metadata">

### Author: ![satonotdead](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/satonotdead/32/447830_2.png) [@satonotdead](https://meta.discourse.org/u/satonotdead)
#### Post date: [3월 14, 2023, 2:01오후 UTC](https://meta.discourse.org/t/how-to-check-what-prevents-rake-migrate/258047/9 "2023-03-14T14:01:52Z")

</div>

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

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

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

> [@회원가입 오류: PG::UniqueViolation (ERROR: unique constraint을 위반하는 중복 키 값)](https://meta.discourse.org/t/signup-error-pg-uniqueviolation-error-duplicate-key-value-violates-unique-constraint/172572/2):
>
> Looks like your automatic watching groups have a duplicate in them. Not sure how this is possible, but can you try resetting the site setting for auto watching ?

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [3월 14, 2023, 2:15오후 UTC](https://meta.discourse.org/t/how-to-check-what-prevents-rake-migrate/258047/10 "2023-03-14T14:15:28Z")

</div>

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