pfaffman
(Jay Pfaffman)
12월 12, 2019, 9:01오후
1
감사합니다, @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"의 차이처럼요.
알고 있다고 말하고 싶지만, 사실은 잘 모릅니다. 더 잘 아시는 분이 조언을 주지 않는 한, “원숭이가 보면 원숭이가 따라 하듯” 코드를 따라 하는 방법을 권합니다.
pfaffman
(Jay Pfaffman)
12월 13, 2019, 12:14오후
3
저는 그룹 관련 작업을 전혀 하지 않았습니다(플러그인에 그룹이 표시되지 않음) 그리고 해당 스펙이 discourse 전체에서 실패하고 있습니다. 제 포크에 문제가 있는 건 아닌지 확인하기 위해 마스터를 한 번 더 클론해 보겠습니다. 다시 한번 감사합니다!
david
(David Taylor)
12월 13, 2019, 12:18오후
4
테스트 데이터베이스를 마이그레이션해야 할 것 같습니다
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를 반드시 포함했는지 두 번 확인하세요. 그렇지 않으면 실수로 개발 데이터베이스를 삭제하게 될 수 있습니다(저도 이번 주에 실수로 그렇게 했거든요 )
pfaffman
(Jay Pfaffman)
12월 13, 2019, 12:20오후
5
아마 제 문제가 그거였겠네요! development가 아니라 test를 빠뜨렸을 수도 있겠어요. 감사합니다. 아, 그리고 공항으로 떠나기 전에 노트북에 새로운 development 환경을 설치해야 합니다.
david
(David Taylor)
12월 13, 2019, 12:53오후
6
spec suite의 시작 부분에 대기 중인 마이그레이션에 대한 검사를 추가했으니, 앞으로 이런 문제를 더 쉽게 식별할 수 있을 것입니다
committed 12:50PM - 13 Dec 19 UTC
This should catch a few scenarios which can waste a lot of time in development
… - Forgetting to run migrations
- Missing plugin migrations
- Missing post_deploy migrations
pfaffman
(Jay Pfaffman)
12월 13, 2019, 5:10오후
7
고마워요, 데이비드! 이제 경고가 출력되는 걸 확인했어요. 테스트 데이터베이스 마이그레이션이 왜 그렇게 어려웠는지는 정확히 이해가 안 되지만, destroy, create, migrate를 여러 번 실행한 뒤, 당신이 추천해 주신 RAILS_ENV=test bin/rake db:migrate를 실행한 후에야 스펙이 깨져 있다는 걸 발견할 수 있었어요. 이제 고칠 수 있게 됐고, 스펙 작성법을 배우는 길로 들어서고 있어요. 다시 한번 도움 주셔서 감사합니다, @Mittineague .
david
(David Taylor)
12월 13, 2019, 5:14오후
8
제 커밋의 배경은 다음과 같은 버그를 발견했기 때문입니다.
RAILS_ENV=test rake db:drop db:create db:migrate
이 명령어에는 post_deploy 마이그레이션이 포함되지 않습니다. db:migrate를 별도로 실행해야 합니다.
반드시 수정할 예정이지만, 그 동안 이 경고 메시지가 좌절감을 줄이는 데 도움이 되길 바랍니다!
pfaffman
(Jay Pfaffman)
3월 2, 2021, 4:44오후
9
그 문제가 수정되었나요? ./bin/rake db:drop db:create가 테스트 데이터베이스를 삭제하고 다시 생성하는 것 같지만, ./bin/rake db:migrate가 테스트 환경에 대한 마이그레이션도 함께 수행하지 않는 것으로 보입니다.