programing tip

schema.rb를 잃어 버렸습니다!

itbloger 2020. 7. 4. 11:09
반응형

schema.rb를 잃어 버렸습니다! 재생성 할 수 있습니까?


일부 배포 문제로 인해 git에서 schema.rb 추적을 중지했습니다. 어쨌든 나는 이것을 schema.rb 파일이 사라지는 방식으로 채워 넣었습니다.

데이터베이스 또는 마이그레이션에서 schema.rb를 재생성하는 방법이 있습니까? 기존 데이터를 잃지 않기를 원합니다.


실행하면 rake -TRails 프로젝트에 가능한 모든 레이크 작업이 나열됩니다. 그중 하나가 db : schema : dump 이며 데이터베이스에서 Rails 앱의 schema.rb를 다시 만듭니다.

bundle exec rake db:schema:dump

꼼꼼한,

rake db:schema:dump

현재 DB 스키마 덤프 DB를 FROM을 . 이는 마이그레이션을 변경 한 경우 IMO가 아닌 schema.rb 파일에 반영 되지 않음을 의미 합니다.

마이그레이션에서 스키마를 다시 작성하려면 다음을 수행하십시오.

rake db:drop  # ERASES THE DATABASE !!!! 
rake db:create
rake db:migrate

rake db:schema:dump

이것이 여전히 Rails 3에서 유효하다고 생각합니다-데이터베이스에서 schema.rb를 재생성합니다.


레일즈 5 웨이 :

rails db:schema:dump

또는 Gem :: LoadError가 발생하면 :

bundle exec rails db:schema:dump

노트 :

rails 5에서 rails대신에 를 사용하여 작업을 생성 / 실행하는 것이 좋습니다 rake. 이것은 단지 Rails 생성 된 작업이에서 확장 된 것을 기억하기위한 것 .rake입니다 lib/tasks/myTask.rake. 이 작업은 앞에 추가하여 실행할 수도 있습니다 rake.


schema.rb로컬로 재생성 하면 괜찮을 것입니다. 단순히 데이터베이스 테이블의 구조를 나타냅니다. 데이터 자체는이 파일에 포함되어 있지 않습니다.

schema.rb파일 을 재생성하려면 다음을 실행하십시오.

bundle exec rake db:schema:dump

그런 다음 새 schema.rb파일을 커밋하면 상태 가 좋아야합니다!


schema.rb 파일 자체에서 직접 :

다른 시스템에서 애플리케이션 데이터베이스를 작성해야하는 경우 db:schema:load모든 마이그레이션을 처음부터 실행하지 않고을 사용해야합니다 . 후자는 결함이 있고 지속 불가능한 접근 방식입니다 (이주가 많을수록 더 느리게 실행되며 문제가 발생할 가능성이 커짐).

따라서이 rake db:migrate글을 쓰는 시점에서 최저 등급의 답변으로 제안 된 의 제안을하지 마십시오 .


또한 마이그레이션을 삭제해도 이전 스키마가 새로 고쳐지지 않는 비슷한 문제가있었습니다.

그래서 내가 한 것은 데이터베이스의 기존 테이블을 모두 삭제하고 다시 마이그레이션하는 것이 었습니다. 그런 다음 "db : schema : load"명령을 실행하면 새로운 schema.rb가 나옵니다.

drop table my_table_name // deleted them indivisully
rake db:migrate
rake db:schema:dump // re-created a new schema

참고 URL : https://stackoverflow.com/questions/9731585/lost-my-schema-rb-can-it-be-regenerated

반응형