2013-09-24 3 views
2

처음으로 프로덕션 환경에 배포 할 준비가 된 많은 마이그레이션 파일이있는 응용 프로그램이 있다고 가정 해 봅니다. 아직 db : schema :로드가 db : 마이그레이션 작업에 어떻게 영향을 미치는지

  • B를 실행하지 않은 db:migrate을 실행하고 모든 마이그레이션을 통해 그것을주기를 가지고 -

    • A - : 내가 이해에서, 나는 프로덕션 서버에 DB를 얻기 위해 기본적으로 두 가지 옵션이 있습니다 schema.rb 주석에 설명 된대로 내가, B 신선한 구축에 최적의 선택이 될 것입니다 알고 db:schema:load 실행하고 스키마 파일

    에서 DB를 구축 있습니다

    # 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). 
    

    내가 궁금해하는 점은 이것이 프로덕션 서버의 마이그레이션에 어떤 영향을 미치나요? 예를 들어, 다음 순서로 수행 할 경우 :

    1. 새 프로덕션 서버에서 db:schema:load을 실행합니다.
    2. 개발중인 내 스키마를 변경하고 프로덕션으로 푸시하십시오. 프로덕션 서버

  • 실행 db:migrate은 어떻게됩니까? db:schema:load 작업보다 최근의 마이그레이션 만 사용하는지 또는 모든 작업을 실행하려고합니까?

  • +0

    그리고 당신은 단순히 그 몇 가지 명령을 실행하여 자신을 확인하는 것에 대해 생각하지 않았습니까? –

    +0

    @MichaelSzyndel - 누가 내가 그것에 대해 생각하지 않는다고 했습니까? – Yarin

    +0

    귀하의 질문은 그렇습니다. 만약 당신이 그게 괜찮아요 (일만명 마이 그 레이션 db 테이블이'schema : load' 중에 채워져있는 한 실제로 보지 못했을 것입니다) –

    답변

    1

    좋은 질문입니다. 대답은 최신 db:schema:load 이벤트가 실행 된 후에 생성 된 마이그레이션 만 실행된다는 것입니다.

    schema.rb 파일은 그와 관련된 버전 스탬프가 있습니다

    ActiveRecord::Schema.define(version: 20130928225041) do ... 
    

    당신이 db:schema:load을 실행 레일 그 schema.rb 파일에 따라 새로운 데이터베이스를 생성, 그리고 같은 시간으로 채워에서 버전 번호가 스키마의 버전 번호보다 앞에있는 모든 마이그레이션이있는 schema_migrations 테이블

    레일스가 본질적으로 그 시점까지 모든 마이그레이션을 위조했다고 말할 수는 있지만 실제로는 실행하지 않습니다. (이 테스트는 빈 마이그레이션 파일을 생성하여 로컬에서 db:migrate을 호출했지만 서버에 배포하기 전에 마이그레이션 파일에 오류를 삽입했습니다. 서버에서 db:schema:load을 실행 했으므로 잘못된 마이그레이션이 포함되었습니다. 스키마가 실행 된 것처럼 schema_migrations 테이블에 있습니다.