11

필자의 레일 마이그레이션은 스키마를 공백과 테이블 열의 위치로 업데이트합니다.레일스 마이그레이션은 항상 공백을 삽입하거나 스키마의 열 순서를 바꾸는 것입니다.

따라서 대부분의 경우 bundle exec rake db:migrate을 실행하면 다음 시나리오 중 하나가 수행됩니다. 이를 메인 브랜치에 병합하면 다른 개발자들이이 문제를 해결할 수 있으며 레일 이동은 탭과 위치 정렬을 되돌립니다.

우리는 스키마의 마지막 커미터 인 경우 마이그레이션을 실행할 때 팀의 세 개발자 모두 동일한 문제가 있음을 확인했습니다.

방금 ​​다른 개발자와 동일한 postgres to v9.2.4을 업데이트했습니다. 내가 뭘 시도 할 수있는 아이디어가 있니?

예를 들면 다음

은 무슨 일이 일어나고 있는지 보여주기 위해 자식 차이점이다. 다시 주문 스키마의

예 : 스키마에 탭을 추가

create_table "accounts", :force => true do |t| 
    t.integer "organisation_id" 
- t.boolean "active",    :default => false 
    t.text  "notes" 
+ t.boolean "active",    :default => false 
    end 

예 :

create_table "comments", :force => true do |t| 
- t.integer "commentable_id", :default => 0 
- t.string "commentable_type", :default => "" 
+ t.integer "commentable_id",  :default => 0 
+ t.string "commentable_type", :default => "" 
- t.datetime "created_at",      :null => false 
- t.datetime "updated_at",      :null => false 
+ t.datetime "created_at",       :null => false 
+ t.datetime "updated_at",       :null => false 
+0

공백 문자가 탭이라고 생각하는 이유는 무엇입니까? 'create_table' 중 하나의 전체 버전을 볼 기회가 있습니까? –

+0

@muistooshort 감사합니다. 그들은 공백이 될 수 있습니다. – Coderama

+1

첫 번째 것은 모든 사람들의 열이 데이터베이스 내에서 동일한 순서로 있지 않다는 것을 의미합니다.'psql'의'\ d accounts' 결과를 비교하면 범인을 찾을 수 있습니다. 이것은 여러 가지 방법으로 발생할 수 있으며 문제가되어서는 안됩니다. 두 번째 것은 아마도 정렬 작업 일뿐입니다 (즉,': default => ...'옵션을 모두 정렬하십시오). 그러나'schema.rb' 파일 앞뒤에 전체를 보지 않고서는 말하기 어렵습니다. –

답변

-12

당신은 당신의 버전 제어에서 schema.rb을 무시해야합니다. 마이그레이션 순서와 생성자에 따라 다르게 변경됩니다. 프로젝트에 관련된 각 개발자에 대해 적절한 스키마를 생성하기 위해 마이그레이션 만 필요합니다.

감사합니다.

+3

* 수정 * : 버전 관리에서 schema.rb를 무시하면 안됩니다 **. http://stackoverflow.com/questions/6520017/is-it-a-good-idea-to-put-db-schema-rb-to-gitignore-list – Dorian

0

나는이 오류가 다른 공백 구성 (숭고를 사용하는 경우 '탭 폭')으로 인해 발생한 것으로 생각합니다.

2

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

열, 인덱스 이름 및 외래 키를 정렬하고 초과 공백을 제거하고 schema.rb 파일의 출력을 통합하기위한 일부 형식으로 Rubocop을 실행합니다.

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

는 당신이 바로 실행 레이크 데시벨 당신의 Gemfile에 추가 한 후 : 이동 또는 레이크 dB : 스키마 : 정상처럼 덤프.

+1

감사합니다! 이것은 레일 코어에 있어야합니다 – mahemoff

+0

건배, 다행 그것은 누군가를 도왔습니다! – jakeonrails

+2

@ jakeonrails 나는 그것을 우연히 발견했다. 나는 보석의 이름에 '정렬'이라는 단어를 추가하는 것이 추가적인주의를 끌 것이라고 의심합니다. 훌륭한 직업, 고마워! – user3763682

관련 문제