db : test : clone, db : test : clone_structure, db : test : load 및 db : test : prepare의 차이점은 무엇입니까?
레일과 데이터베이스를 처음 접하는 사람에게는 rubyonrails.org의 공식 설명이이 네 가지 작업이 모두 똑같이 들린다는 사실을 인정해야합니다. 인용문 :
rake db:test:clone Recreate the test database from
the current environment’s database schema
rake db:test:clone_structure Recreate the test database from the
development structure
rake db:test:load Recreate the test database from the current schema.rb
rake db:test:prepare Check for pending migrations and load the test schema
나는 구조와 스키마의 차이도 모른다. 그리고 현재 환경의 스키마를로드하는 것과 스키마 .rb를로드하는 것의 차이점은 무엇입니까?
적절한 작업은 얼마나 유사하거나 다른가요?
아주 좋은 질문입니다. 그래서 난 레일 소스에 싸웠습니다 . 이제 더 명확 해졌습니다.database.rake
db:test:clone
db:schema:dump
및 의 조합 일뿐입니다db:test:load
.task :clone => %w(db:schema:dump db:test:load)
db:test:clone_structure
다음{rails_env}_structure.sql
파일을 사용 합니다.task :clone_structure => [ 'db:structure:dump', 'db:test:purge' ] do # skipped some code, here's what happens for MySQL: ActiveRecord::Base.establish_connection(:test) # ... IO.readlines("#{Rails.root}/db/#{Rails.env}_structure.sql").join.split("\n\n").each do |table| ActiveRecord::Base.connection.execute(table) end end
db:test:load
과 동일db:schema:load
하지만 테스트 데이터베이스에서 호출합니다.task :load => 'db:test:purge' do ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['test']) # ... db_namespace['schema:load'].invoke end
db:test:prepare
이 보류 중인지 마이그레이션 여부를 경고하고 오는가 않은 경우 스키마 형식에 따라 실행db:test:clone_structure
({rails_env}_structure.sql
파일 사용) 또는db:test:load
(schema.rb
파일 사용) (이것은 나에게 약간 혼란스럽고 다른 사람 이 확장 할 수 있음 )task :prepare => 'db:abort_if_pending_migrations' do # ... db_namespace[{ :sql => 'test:clone_structure', :ruby => 'test:load' }[ActiveRecord::Base.schema_format]].invoke end
이것이 해결되기를 바랍니다! 다시 말하지만, database.rake 파일을 살펴 보는 [해석] 쉽고 다른 질문을 정리할 수 있습니다. 이 링크는 :test
네임 스페이스 의 시작 인 줄로 이동 합니다.
완전히 완전히 완전히 완전히 아닙니다. 'schema'라는 단어가 포함 된 모든 작업은 ... / db / schema.rb 파일에서 작동합니다. schema.rb는 모든 마이그레이션을 적용한 후 스키마의 상태입니다. 모든 db 마이그레이션을 실행하는 대신 스키마를 복원하기 위해 사용 가능합니다 (마이그레이션이 경우 시간이 오래 걸릴 수 있음).
'structure'라는 단어가 포함 된 모든 작업은 {Rails.env} _structure.sql 파일에서 작동합니다. 이 파일은 스키마에 schema.rb 파일에서 표현할 수없는 구문이 포함되어있을 때 사용됩니다. 예를 들어 특정 RDBMS에 기능을 사용하는 경우입니다. 내부적으로 Rails는 RDBMS에있는 스키마 기능 유틸리티를 사용하여이 파일을 생성합니다. 스키마를 복원하기 위해 RDBMS 관련 도구를 사용하여 파일을 읽고 SQL 문을 다시 실행합니다.
Rails는 설정 여부에 따라 schema.rb 경로 또는 structure.sql 경로로 선택할지 여부를 알고 있습니다.
config.active_record.schema_format = : sql
... / 설정 / application.rb에서
'ProgramingTip' 카테고리의 다른 글
ASP.NET MVC 자동 캐싱 옵션을 선택하는 방법은 무엇입니까? (0) | 2020.10.28 |
---|---|
wkhtmltopdf의 테이블 행 내부에서 페이지 나누기를 방지하는 방법 (0) | 2020.10.28 |
iPhone / iPad / iPod touch의 색상 감지? (0) | 2020.10.27 |
Android에서 직접 의도 putExtra () Bundle을 사용할 때의 이점 대신 (0) | 2020.10.27 |
SQL 약력 러 CPU / 기간 단위 (0) | 2020.10.27 |