테스트 데이터베이스 마이그레이션 문제

감사합니다, @Mittineague!

잠시 후, 그 말이 이해가졌습니다. 저는 스펙을 작성하기도 했는데, 제 스펙을 추가하기 전(그리고 제가 코드를 추가하기 전 상태로 되돌렸을 때)에도 스펙이 실패합니다. 그 이유는 다음과 같습니다:

An error occurred while loading ./plugins/discourse-prometheus/spec/middleware/metrics_spec.rb.
Failure/Error: Group.find_by(id: id)

ActiveRecord::StatementInvalid:
  PG::UndefinedTable: ERROR:  relation "groups" does not exist
  LINE 8:  WHERE a.attrelid = '"groups"'::regclass
                              ^
# (eval):24:in `async_exec'
# (eval):24:in `async_exec'
# ./app/models/group.rb:529:in `lookup_group'
# ./app/models/group.rb:513:in `block in ensure_automatic_groups!'
# ./app/models/group.rb:512:in `each_key'
# ./app/models/group.rb:512:in `ensure_automatic_groups!'
# (eval):3:in `block (2 levels) in run_file'
# ./spec/rails_helper.rb:79:in `<top (required)>'
# ./plugins/discourse-prometheus/spec/middleware/metrics_spec.rb:3:in `require'
# ./plugins/discourse-prometheus/spec/middleware/metrics_spec.rb:3:in `<top (required)>'
# ------------------
# --- Caused by: ---
# PG::UndefinedTable:
#   ERROR:  relation "groups" does not exist
#   LINE 8:  WHERE a.attrelid = '"groups"'::regclass
#                               ^
#   (eval):24:in `async_exec'
No examples found.

이것은 사이트의 거의 모든 스펙에서 발생하는 것 같습니다. 정상적으로 작동해야 하는 상태로 돌아가기 위해 git reset --hard upstream/master를 올바르게 수행했다고 생각하며, 데이터베이스를 삭제하고 다시 생성했지만 여전히 그 오류가 발생합니다.

솔직히 에러 메시지를 읽는 데는 잘 못 하는 편입니다. 에러 메시지가 참조하는 것으로 생각한 파일을 확인해 봤지만 "group(s)"라는 줄을 찾지 못했습니다.

만약 이 코드가 질문자 본인의 것이라면, 제가 좀 헤매는 부분이 있을 수 있습니다. 예를 들어 복수형이 하나 이상을 의미할 때, 혹은 관례에 따라 그렇게 쓸 때 같은 경우 말이죠.

즉, 문법에서는 "s"가 없는 "group"을 원하는데, 질문자는 "groups"라고 생각하고 계실 수 있습니다.

비슷하게, 코드는 특정 대소문자를 요구하는 경우도 있습니다. 예를 들어 "Group"과 "group"의 차이처럼요.

알고 있다고 말하고 싶지만, 사실은 잘 모릅니다. 더 잘 아시는 분이 조언을 주지 않는 한, “원숭이가 보면 원숭이가 따라 하듯” 코드를 따라 하는 방법을 권합니다.

저는 그룹 관련 작업을 전혀 하지 않았습니다(플러그인에 그룹이 표시되지 않음) 그리고 해당 스펙이 discourse 전체에서 실패하고 있습니다. 제 포크에 문제가 있는 건 아닌지 확인하기 위해 마스터를 한 번 더 클론해 보겠습니다. 다시 한번 감사합니다!

테스트 데이터베이스를 마이그레이션해야 할 것 같습니다

RAILS_ENV=test bin/rake db:migrate

이 방법으로 해결되지 않으면, 데이터베이스를 삭제하고 처음부터 다시 시작하세요

RAILS_ENV=test bin/rake db:drop
RAILS_ENV=test bin/rake db:create
RAILS_ENV=test bin/rake db:migrate

RAILS_ENV=test를 반드시 포함했는지 두 번 확인하세요. 그렇지 않으면 실수로 개발 데이터베이스를 삭제하게 될 수 있습니다(저도 이번 주에 실수로 그렇게 했거든요 :man_facepalming:)

아마 제 문제가 그거였겠네요! development가 아니라 test를 빠뜨렸을 수도 있겠어요. 감사합니다. 아, 그리고 공항으로 떠나기 전에 노트북에 새로운 development 환경을 설치해야 합니다.

spec suite의 시작 부분에 대기 중인 마이그레이션에 대한 검사를 추가했으니, 앞으로 이런 문제를 더 쉽게 식별할 수 있을 것입니다

고마워요, 데이비드! 이제 경고가 출력되는 걸 확인했어요. 테스트 데이터베이스 마이그레이션이 왜 그렇게 어려웠는지는 정확히 이해가 안 되지만, destroy, create, migrate를 여러 번 실행한 뒤, 당신이 추천해 주신 RAILS_ENV=test bin/rake db:migrate를 실행한 후에야 스펙이 깨져 있다는 걸 발견할 수 있었어요. 이제 고칠 수 있게 됐고, 스펙 작성법을 배우는 길로 들어서고 있어요. 다시 한번 도움 주셔서 감사합니다, @Mittineague.

제 커밋의 배경은 다음과 같은 버그를 발견했기 때문입니다.

RAILS_ENV=test rake db:drop db:create db:migrate

이 명령어에는 post_deploy 마이그레이션이 포함되지 않습니다. db:migrate를 별도로 실행해야 합니다.

반드시 수정할 예정이지만, 그 동안 이 경고 메시지가 좌절감을 줄이는 데 도움이 되길 바랍니다!

그 문제가 수정되었나요? ./bin/rake db:drop db:create가 테스트 데이터베이스를 삭제하고 다시 생성하는 것 같지만, ./bin/rake db:migrate가 테스트 환경에 대한 마이그레이션도 함께 수행하지 않는 것으로 보입니다.