복붙노트

[RUBY-ON-RAILS] 자식에 schema.rb을 관리 할 수있는 선호하는 방법은 무엇입니까?

RUBY-ON-RAILS

자식에 schema.rb을 관리 할 수있는 선호하는 방법은 무엇입니까?

나는 그 파일에서 새 데이터베이스 스키마를로드 할 수 있기를 원하기 때문에, .gitignore에 schema.rb를 추가하지 않습니다. 마이그레이션 : 리셋 그러나, 유지 쉽게 신선한 데시벨로 해결되는 가짜 충돌 모든 종류의 원인이되는 체크.

기본적으로 나는 방식을 원하는 :

schema.rb를 업데이트하고 올바른 것을 알고에 대한 책임을 하나 또는 두 사람이 될 것입니다.

내 케이크를 가지고도 그것을 먹을 수있는 방법이 있나요?

해결법

  1. ==============================

    1.마이그레이션을 : 무엇 나를 위해 정말 잘 근무하고하는 것은 및 .gitignore schema.rb을 삭제 한 다음 그들이 DB를 긁어 때 각 개발자 재생하는 것입니다.

    마이그레이션을 : 무엇 나를 위해 정말 잘 근무하고하는 것은 및 .gitignore schema.rb을 삭제 한 다음 그들이 DB를 긁어 때 각 개발자 재생하는 것입니다.

    당신은 아직도 당신이 0에서 마이그레이션 단순히 "롤 - 업"주기적으로 마이그레이션을 수행하여 년 전에서 깨진 마이그레이션 위험없이 원하는 것을 얻을 수 있습니다. 이 작업을하여 수행 할 수 있습니다

    이제 initial_schema 마이그레이션은 새로운 시스템에 대한 출발점이고 당신은 제대로 해결되지 않을 수 있습니다 schema.rb의 충돌에 대해 걱정할 필요가 없습니다. 그것은 마법 아니지만, 그것을 작동합니다.

  2. ==============================

    2.난 당신이 존재하지 않는 찾고있는 마법의 솔루션 두려워. 이 파일은 일반적으로 다음 버전 라인에 어떤 충돌 단지 나중에 두 날짜의 선택, 버전 제어에서 관리됩니다. 만큼 당신이 또한 관련된 모든 마이그레이션을 실행하는 것처럼 아무것도 이런 식으로 동기화되지 않을 수 없습니다. 두 개발자는 schema.rb의 유사한 영역에 대한 수정의 원인이 당신은 당신이 정상 병합 충돌 해결에 직면 버전에 추가 충돌을 얻을 수 있지만, 제 생각에이 일반적으로 쉽게 이해하고 해결하는 경우. 나는이 몇 가지 도움이되기를 바랍니다!

    난 당신이 존재하지 않는 찾고있는 마법의 솔루션 두려워. 이 파일은 일반적으로 다음 버전 라인에 어떤 충돌 단지 나중에 두 날짜의 선택, 버전 제어에서 관리됩니다. 만큼 당신이 또한 관련된 모든 마이그레이션을 실행하는 것처럼 아무것도 이런 식으로 동기화되지 않을 수 없습니다. 두 개발자는 schema.rb의 유사한 영역에 대한 수정의 원인이 당신은 당신이 정상 병합 충돌 해결에 직면 버전에 추가 충돌을 얻을 수 있지만, 제 생각에이 일반적으로 쉽게 이해하고 해결하는 경우. 나는이 몇 가지 도움이되기를 바랍니다!

  3. ==============================

    3.당신이 할 수있는 한 가지 다른 점은 사용하는 것입니다 :

    당신이 할 수있는 한 가지 다른 점은 사용하는 것입니다 :

    git update-index --assume-unchanged /path/schema.rb
    

    이 저장소에서 파일을 유지하지만 변경 사항을 추적하지 않습니다. 당신은 사용하여 추적 언제든지 전환 할 수 있습니다 :

    git update-index --no-assume-unchanged /path/schema.rb
    
  4. ==============================

    4.사전 확약 자식 후크 덤프 : 갈퀴 DB를 수행하기에 충분시겠습니까?

    사전 확약 자식 후크 덤프 : 갈퀴 DB를 수행하기에 충분시겠습니까?

    다음은 반드시 수정 (1) 또는 (2)하지만 병합 문제 돌볼 수있는 것, 그리고 아마 (1)과 (2)는 멀리 이동합니다.

  5. ==============================

    5.대신 .gitignore를 사용하는 별도의 가지를 사용 개발하는 생략합니다 schema.rb 및 schema.rb을 포함 테스트 및 배포. 만 개발 지점에서 코드를 변경하고 개발에 테스트에서 병합하지 않습니다. 별도의 지점에서 schema.rb 유지 :

    대신 .gitignore를 사용하는 별도의 가지를 사용 개발하는 생략합니다 schema.rb 및 schema.rb을 포함 테스트 및 배포. 만 개발 지점에서 코드를 변경하고 개발에 테스트에서 병합하지 않습니다. 별도의 지점에서 schema.rb 유지 :

    Developer A             
        Develop      --------             
        Local Schema          \           Your Repo
        Test                    --------->    Dev A
                                --------->    Dev B
    Developer B               /               Master
        Develop      --------                 Schema
        Local Schema                          Test
        Test                                  Deploy
    

    그들이 포함하거나 특정 파일뿐만 아니라 트랙 파일 버전을 제외 할 수 있도록 힘내에서, 가지, 파일 내용의 컬렉션에 대한 포인터입니다. 이것은 특정 워크 플로우를 구축하기위한 그들에게 유연한 도구를 만든다.

  6. ==============================

    6.당신은 병합 전략을 정의 할 수 있습니다. 나는이 솔루션을 발견했지만, 소스를 기억 해달라고

    당신은 병합 전략을 정의 할 수 있습니다. 나는이 솔루션을 발견했지만, 소스를 기억 해달라고

    [merge "railsschema"]
    name = newer Rails schema version
    driver = "ruby -e '\n\
        system %(git), %(merge-file), %(--marker-size=%L), %(%A), %(%O), %(%B)\n\
        b = File.read(%(%A))\n\
        b.sub!(/^<+ .*\\nActiveRecord::Schema\\.define.:version => (\\d+). do\\n=+\\nActiveRecord::Schema\\.define.:version => (\\d+). do\\n>+ .*/) do\n\
          %(ActiveRecord::Schema.define(:version => #{[$1, $2].max}) do)\n\
        end\n\
        File.open(%(%A), %(w)) {|f| f.write(b)}\n\
        exit 1 if b.include?(%(<)*%L)'"
    

    이 "어딘가"를 넣어

    git-config --global core.attributesfile "somewhere"
    
  7. ==============================

    7.나는이 문제를 해결하기 위해 보석을 만들었습니다.

    나는이 문제를 해결하기 위해 보석을 만들었습니다.

    그것은 열, 인덱스 이름과 외래 키를 제거합니다 여분의 공백을 정렬하고 schema.rb 파일의 출력을 통합하는 서식을 일부 Rubocop를 실행합니다.

    https://github.com/jakeonrails/fix-db-schema-conflicts

    당신이 당신의 Gemfile에 추가 한 후에는 갈퀴 DB를 실행 마이그레이션 또는 갈퀴 DB를 : 스키마 덤프를 정상처럼.

  8. ==============================

    8.데이터베이스, 자식 상태에서 schema.rb 파일 업데이트 및 나타납니다 마이그레이션 할 때마다. 뭔가 노력하고 가끔 자식 풀을 수행 할 때 해결 충돌로 당겨 전에 schema.rb 파일을 커밋해야하기 때문에,이 성가신 수 있습니다. 이 방법을 사용하면 데이터베이스를 마이그레이션 할 때마다, 당신은 schema.rb 파일을 커밋해야합니다.

    데이터베이스, 자식 상태에서 schema.rb 파일 업데이트 및 나타납니다 마이그레이션 할 때마다. 뭔가 노력하고 가끔 자식 풀을 수행 할 때 해결 충돌로 당겨 전에 schema.rb 파일을 커밋해야하기 때문에,이 성가신 수 있습니다. 이 방법을 사용하면 데이터베이스를 마이그레이션 할 때마다, 당신은 schema.rb 파일을 커밋해야합니다.

  9. from https://stackoverflow.com/questions/737854/what-is-the-preferred-way-to-manage-schema-rb-in-git by cc-by-sa and MIT license