$rake db:* 명령과 Discourse 인스턴스 초기화

먼저,这么好的 앱을 만들어 주신 개발자분들께 감사드립니다!

조금 헷갈리는 부분이 있어서 확인을 요청드립니다. 제 생각에는 Rails 6에서 초기화를 위해 $ rake db:* 명령을 사용하는 올바른 방법은 $ rake db:prepare를 실행하는 것이라고 알고 있었습니다. 하지만 $ rake db:prepare만 단독으로 실행하면 Discourse가 제대로 초기화되지 않습니다. 그리고 Meta/여기에서의 논의들을 살펴보니, prepare는 테스트 데이터 초기화에 사용되거나 백그라운드에서 실행되는 작업 중 어딘가에서 사용되는 것으로 보입니다.

Discourse 데이터베이스의 마이그레이션 또는 초기화를 위해 $ rake db:migrate가 제가 실행해야 하는 유일한 명령인지, 그리고 왜 그런지에 대해 이해할 수 있도록 도와주시겠습니까?

먼저 db:create를 실행한 후 마이그레이션을 해야 한다고 생각합니다.

마이클이 말했듯이 데이터베이스가 존재해야 합니다. 저는 정기적으로

   rake db:drop db:create db:migrate

명령을 실행하여 데이터베이스를 초기 상태로 재설정합니다(새로 설치한 데이터베이스의 백업을 저장하는 것을 잊었을 때 말이죠!).

빌드 프로세스는 기본적으로 db:create를 실행해야 한다고 생각합니다. 제 인스턴스에서 어떤 기능이 누락된 것이 아니라면, 인스턴스가 에셋 프리컴파일(또는 이와 유사한 작업)과 마이그레이션만으로 정상적으로 작동하는 것으로 보이기 때문입니다.

조사를 해본 결과, 내가 찾던 답에 대한 더 자세한 정보가 있는 것 같습니다.

Discourse의 rake 태스크가 rails db:migrate를 오버라이드하고 있습니다. 이는 Rails 앱에서 비정통적인 접근 방식으로 간주될 수 있으며, 예를 들어 이 PR: Add db:prepare rake task. - Pull Request #35768 - rails/rails - GitHub 을 참고할 수 있습니다. db:prepare가 무엇을 하는지 살펴보면, 이는 ActiveRecord에 직접 접근하여 예상된 DB 설정을 수행하지만, 상위(upstream)에서 기대하는 일부 부분을 오버라이드하기 때문에 일반적으로 기대할 수 있는 다른 개별 db:* 태스크를 호출하지 않습니다.

부연 설명으로, 현재 제가 Discourse를 설정한 방식에서는 discourse DB 사용자에게 권한 상승이 허용되지 않으므로, 빌드 이후 db:drop 및 db:create와 같은 작업을 수행하려면 제가 구현한 설정에서 약간의 변경이 필요할 것으로 보입니다.