GH 워크플로에서 테스트 중 이상한 마이그레이션 오류

rubocop의 조언은 좋지만, 이 오류의 원인은 아닐 것 같습니다. (그곳에서 언급된 'risk’는 높은 트래픽을 받는 테이블에 대한 잠금(lock)을 의미하며, 이는 프로덕션 트래픽에 영향을 미칩니다. 따라서 테스트 환경에서 오류를 일으킬 만한 것이 아닙니다)

RAILS_ENV=test bin/rake db:drop db:create db:migrate를 실행하여 로컬에서도 동일한 오류를 재현할 수 있을 것입니다. (즉, locations 플러그인이 활성화된 상태에서 데이터베이스를 처음부터 마이그레이션하는 것입니다)

마이그레이션 안에서 Rake 태스크를 호출하고 있다는 점이 문제일 것으로 의심됩니다. 코어에서는 이상한 부수 효과(side effects)가 발생할 수 있기 때문에 마이그레이션 내에서 어떤 종류의 애플리케이션 코드도 실행하는 것을 일반적으로 피합니다. 순수 SQL을 사용하는 것이 가장 좋습니다.

이 경우, 제 추측은 ActiveRecord 스키마 캐시가 마이그레이션 초기 단계(즉, topics.off_off_count가 아직 존재할 때)에 미리 채워진다는 것입니다. 그런 다음 rake 태스크가 실행되면, 오래된 스키마 캐시를 사용하여 실행되므로 ActiveRecord가 더 이상 존재하지 않는 컬럼을 로드하려고 시도하게 됩니다.

rake 태스크를 호출하기 전에 ActiveRecord::Base.clear_cache!를 추가하면 완화할 수 있을 것입니다… 하지만 그걸 추천으로 받아들이지는 마세요 :wink:. 최선은 rake 태스크 호출 자체를 피하는 것입니다. 데이터베이스에서 무언가를 조작해야 한다면, 마이그레이션 내에서 순수 SQL을 사용하세요.