[ruby-on-rails] rake db : schema : load와 마이그레이션

여기에서 매우 간단한 질문-앱이 복잡해져 마이그레이션이 느리고 번거로울 수 있고 rake db:schema:load대신 더 많은 호출이 필요한 경우 마이그레이션이 왜 존재합니까?

위의 대답이 마이그레이션이 버전 제어 (데이터베이스 변경에 대한 단계별 기록)에 사용되는 경우 앱이 더 복잡해지고 더 많이 rake db:schema:load사용됨에 따라 기본 기능을 계속 유지합니까?


주의:

이 질문에 대한 답변에서 : 프로덕션 서버의 rake db:schema:load 데이터삭제 하므로 사용할 때주의하십시오.



답변

마이그레이션은 데이터베이스에 대한 앞뒤 단계 변경을 제공합니다. 프로덕션 환경에서는 배포 중에 데이터베이스를 증분 적으로 변경해야합니다. 마이그레이션은이 기능에 롤백 페일 세이프를 제공합니다. rake db:schema:load프로덕션 서버에서 실행 하면 모든 프로덕션 데이터가 삭제됩니다. 이것은 위험한 습관입니다.

그러나 이민을 때때로 “붕괴”하는 것이 바람직한 관행이라고 생각합니다. 이를 위해서는 이전 마이그레이션을 삭제 schema.rb하고 파일 과 매우 유사한 단일 마이그레이션 schema_migrations으로 바꾸고이 변경 사항을 반영 하도록 테이블을 업데이트해야 합니다. 이 작업을 수행 할 때 매우주의하십시오! 조심하지 않으면 생산 데이터를 쉽게 삭제할 수 있습니다.

부수적으로, 나는 당신이 마이그레이션 파일에 데이터 생성을 두어서는 안된다는 것을 강력하게 믿는다. 이 seed.rb파일 또는 사용자 정의 레이크 또는 배포 작업에 파일을 사용할 수 있습니다. 이를 마이그레이션 파일에 넣으면 데이터베이스 스키마 스펙과 데이터 스펙이 혼합되어 마이그레이션 파일을 실행할 때 충돌이 발생할 수 있습니다.


답변

방금 전에이 게시물을 우연히 만났으며 예상했던 대답을 보지 못했습니다.

rake db:schema:load시스템을 처음으로 프로덕션 환경에 배치 할 때 좋습니다. 그런 다음 정상적으로 마이그레이션을 실행해야합니다.

또한 스키마는 마이그레이션을 정리할 때에도 다른 시스템을 프로덕션에 배치 할 수있는 모든 정보를 제공하므로 원하는 때마다 마이그레이션을 정리하는 데 도움이됩니다.


답변

마이그레이션을 통해 DB에 데이터를 추가 할 수도 있습니다. 그러나 db : schema : load는 스키마 만로드합니다.


답변

마이그레이션을 롤백 할 수 있으며 추가 기능을 제공합니다. 예를 들어 스키마 변경의 일부로 일부 데이터를 수정해야하는 경우 마이그레이션으로 수행해야합니다.


답변

다른 ORM 사용자는 Rails에 ‘동기화 및 업데이트’기능이 없다는 것이 항상 이상해 보였습니다. 즉, 전체 최신 스키마를 나타내는 스키마 파일을 사용하여 기존 DB 구조를 살펴보고 필요에 따라 테이블, 열, 인덱스를 추가 / 제거합니다.

나에게 이것은 조금 더 느리더라도 훨씬 더 강력 할 것입니다.


답변

이미 주석으로 게시했지만 db / schema.rb 파일의 주석을 여기에 넣는 것이 좋습니다.

# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
#
# It's strongly recommended that you check this file into your version control system.

실제로, 내 경험은 schema.rb 파일이 아닌 git에 마이그레이션 파일을 넣는 것이 좋습니다 …


답변

rake db:migrate데이터베이스에서 테이블을 설정하십시오. 마이그레이션 명령을 실행하면 db / migrate /에서 루비 파일을 찾아 가장 오래된 파일부터 실행합니다. 각 마이그레이션 파일 이름의 시작 부분에 타임 스탬프가 있습니다.

이와 달리 rake db:migrate아직 실행되지 않은 마이그레이션을 실행 rake db:schema:load하면 이미 생성 된 스키마를 db/schema.rb데이터베이스 에로드 합니다.

레이크 데이터베이스 명령 에 대한 자세한 내용은 여기를 참조하십시오 .