내 머리 rake db:migrate
와 의 차이점은 rake db:reset
분명합니다. 내가 이해하지 못하는 것은 rake db:schema:load
이전 두 가지와 얼마나 다른지입니다.
같은 페이지에 있는지 확인하십시오.
rake db:migrate
-아직 실행되지 않은 마이그레이션을 실행합니다.rake db:reset
-데이터베이스를 지우고 (아마도rake db:drop
+rake db:create
+ 수행rake db:migrate
) 새 데이터베이스에서 마이그레이션을 실행합니다.
이해가 잘못되면 명확하게 도와주세요.
답변
- db : migrate 아직 실행되지 않은 (단일) 마이그레이션을 실행합니다.
- db : create 는 데이터베이스를 생성합니다
- db : drop 은 데이터베이스를 삭제합니다
-
db : schema : load는 schema.rb에 따라 기존 데이터베이스 내에 테이블과 열을 작성합니다.
-
db : setup 은 db : create, db : schema : load, db : seed를 수행합니다.
- db : reset 은 db : drop, db : setup을 수행합니다.
- db : migrate : reset 은 db : drop, db : create, db : migrate를 수행합니다.
일반적으로 새 마이그레이션 파일을 통해 스키마를 변경 한 후 db : migrate를 사용합니다 (데이터베이스에 이미 데이터가있는 경우에만 의미가 있습니다). db : schema : load는 앱의 새 인스턴스를 설정할 때 사용됩니다.
도움이 되길 바랍니다.
레일 3.2.12 업데이트 :
방금 소스를 확인했으며 종속성은 다음과 같습니다.
- db : create 는 현재 환경에 대한 데이터베이스를 만듭니다.
- db : create : all 은 모든 환경에 대한 데이터베이스를 만듭니다.
- db : drop 은 현재 환경에 대한 데이터베이스를 삭제합니다.
- db : drop : all 은 모든 환경에 대한 데이터베이스를 삭제합니다.
- db : migrate 는 아직 실행되지 않은 현재 환경에 대한 마이그레이션을 실행합니다.
- db : migrate : up 은 하나의 특정 마이그레이션을 실행합니다
- db : migrate : down은 하나의 특정 마이그레이션을 롤백합니다.
- db : migrate : status 는 현재 마이그레이션 상태를 보여줍니다 .
- db : rollback 은 마지막 마이그레이션을 롤백 합니다.
- db : forward 는 현재 스키마 버전을 다음 버전으로 전진 시킵니다.
- db : seed (전용) db / seed.rb 파일을 실행합니다
- db : schema : load 는 현재 환경 데이터베이스에 스키마를로드합니다.
-
db : schema : dump 는 현재 환경의 스키마를 덤프 합니다 (그리고 db도 생성하는 것 같습니다)
-
db : setup 은 db : schema : load, db : seed를 실행합니다
- db : reset 은 db : drop db : setup을 실행합니다.
- 지정된 마이그레이션에 따라 db : migrate : redo 가 실행 됩니다 (db : migrate : down db : migrate : up) 또는 (db : rollback db : migrate)
- db : migrate : reset 실행 db : drop db : create db : migrate
자세한 내용은 https://github.com/rails/rails/rails/blob/v3.2.12/activerecord/lib/active_record/railties/databases.rake(Rails 3.2.x) 및 https : // github를 참조하십시오. .com / rails / rails / blob / v4.0.5 / activerecord / lib / active_record / railties / databases.rake (rails 4.0.x 용)
답변
TLDR
사용하다
rake db:migrate
스키마를 변경하려는 경우rake db:reset
데이터베이스를 삭제하려면에서 스키마를 다시로드하고 데이터베이스를 다시schema.rb
시드하십시오.rake db:schema:load
제공된대로 데이터베이스를 스키마로 재설정하려는 경우schema.rb
(모든 데이터가 삭제됨)
설명
rake db:schema:load
schema.rb
파일에 제공된대로 스키마를 설정 합니다. 시간이 오래 걸리지 않으므로 새로 설치 한 앱에 유용합니다.db:migrate
중요 참고,
db:schema:load
할 삭제 서버에 데이터를.
rake db:migrate
기존 스키마를 변경합니다. 스키마 버전을 만드는 것과 같습니다. 루비 파일 db:migrate
을 찾아서 db/migrate/
가장 오래된 것으로 시작되지 않은 마이그레이션을 실행합니다. Rails는 마이그레이션 파일 이름의 시작 부분에서 타임 스탬프를보고 가장 오래된 파일을 알고 있습니다. db:migrate
데이터를 데이터베이스에 넣을 수도 있다는 이점이 있습니다. 이것은 실제로 좋은 습관이 아닙니다. rake db:seed
데이터를 추가하는 데 사용 하는 것이 좋습니다 .
rake db:migrate
작업을 위 , 아래 등으로 제공 하여 같은 명령을 활성화 rake db:rollback
하고 가장 유용한 명령으로 만듭니다.
rake db:reset
A는 않습니다 db:drop
및 db:setup
종자 데이터와 스키마를 다시 만들로드, 데이터베이스을 삭제, 초기화합니다
데이터베이스 의 명령과 관련이 있습니다.
namespace :schema do
desc 'Creates a db/schema.rb file that is portable against any DB supported by Active Record'
task :dump => [:environment, :load_config] do
require 'active_record/schema_dumper'
filename = ENV['SCHEMA'] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, 'schema.rb')
File.open(filename, "w:utf-8") do |file|
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
end
db_namespace['schema:dump'].reenable
end
desc 'Loads a schema.rb file into the database'
task :load => [:environment, :load_config, :check_protected_environments] do
ActiveRecord::Tasks::DatabaseTasks.load_schema_current(:ruby, ENV['SCHEMA'])
end
# desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.'
task :reset => [ 'db:drop', 'db:setup' ]
namespace :migrate do
# desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
task :redo => [:environment, :load_config] do
if ENV['VERSION']
db_namespace['migrate:down'].invoke
db_namespace['migrate:up'].invoke
else
db_namespace['rollback'].invoke
db_namespace['migrate'].invoke
end
end
답변
내가 이해하는 한 데이터베이스를 삭제하고 db/schema.rb
파일을 기반으로 다시 만듭니다 . 따라서 schema.rb
파일이 항상 최신 상태이고 버전 관리 상태 인지 확인해야합니다 .
답변
Active Record Rake 작업은이 파일에서와 같이 존재한다고 생각하기 때문에 간단하게 볼 수 있습니다.
https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/lib/active_record/tasks/database_tasks.rb
그들이하는 일은 당신의 질문에 맞습니까?
그것은 그들이 어디에서 왔는지에 달려 있으며 이것은 과제에 따라 다양하다는 것을 보여주는 단지 예입니다. 여기에 작업으로 가득 찬 다른 파일이 있습니다.
https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/Rakefile
이 작업이 있습니다.
namespace :db do
task create: ["db:mysql:build", "db:postgresql:build"]
task drop: ["db:mysql:drop", "db:postgresql:drop"]
end
이것은 귀하의 질문에 대답하지 못할 수도 있지만, 갈퀴 파일과 작업을 통해 소스를 살펴볼 수 있습니다. 그들은 레일 사용을 도와주는 훌륭한 일을 할 때 항상 코드를 잘 설명하지는 않습니다. 우리가해야 할 일을 알면 우리 모두가 도울 수 있습니다.
답변
Rails 5 용으로 업데이트 :
db:create
-현재 RAILS_ENV 환경에 대한 데이터베이스를 작성 합니다. 경우 RAILS_ENV는 그것을 개발 및 테스트 데이터베이스에 대한 기본값으로 지정되어 있지 않습니다.
db:create:all
-모든 환경에 대한 데이터베이스를 작성합니다.
db:drop
-현재 RAILS_ENV 환경에 대한 데이터베이스를 삭제 합니다. 경우 RAILS_ENV는 그것을 개발 및 테스트 데이터베이스에 대한 기본값으로 지정되어 있지 않습니다.
db:drop:all
-모든 환경에 대한 데이터베이스를 삭제합니다.
db:migrate
-아직 실행되지 않은 현재 환경에 대한 마이그레이션을 실행합니다. 기본적으로 개발 환경에서만 마이그레이션을 실행합니다.
db:migrate:redo
– 지정된 마이그레이션에 따라 db : migrate : down 및 db : migrate : up 또는 db : migrate : rollback 및 db : migrate : up을 실행 합니다.
db:migrate:up
-지정된 마이그레이션 버전에 대해 가동을 실행합니다.
db:migrate:down
-주어진 마이그레이션 버전에 대해 다운을 실행합니다.
db:migrate:status
-현재 마이그레이션 상태를 표시합니다.
db:migrate:rollback
-마지막 마이그레이션을 롤백합니다.
db:version
-현재 스키마 버전을 인쇄합니다.
db:forward
-스키마를 다음 버전으로 푸시합니다.
db:seed
-db / seeds.rb 파일을 실행 합니다.
db:schema:load
schema.rb 파일 에서 데이터베이스를 다시 만듭니다 .
db:schema:dump
현재 환경의 스키마를 db / schema.rb로 덤프합니다 .
db:structure:load
– 재현로부터 데이터베이스 structure.sql의 파일.
db:structure:dump
-현재 환경의 스키마를 db / structure.sql로 덤프합니다 . (로 다른 파일을 지정할 수 있습니다 SCHEMA=db/my_structure.sql
)
db:setup
실행은 을 db : 생성 , DB를 : 스키마 : 부하 및 DB를 : 씨 .
db:reset
실행은 을 DB : 드롭 및 DB를 : 설치를 .
db:migrate:reset
– 런은 을 DB : 드롭 , DB를 : 생성 및 DB : 마이그레이션을 .
db:test:prepare
-보류중인 마이그레이션을 확인하고 테스트 스키마를로드하십시오. 인수없이 레이크를 실행하면 기본적으로이 작업이 수행됩니다.
db:test:clone
-현재 환경의 데이터베이스 스키마에서 테스트 데이터베이스를 다시 작성하십시오.
db:test:clone_structure
-db : test : clone 과 유사 하지만 테스트 데이터베이스가 현재 환경의 데이터베이스와 문자셋 및 데이터 정렬을 포함하여 동일한 구조를 갖도록합니다.
db:environment:set
-ar_internal_metadata 테이블 에서 현재 RAILS_ENV 환경을 설정하십시오 . (보호 된 환경 점검의 일부로 사용됩니다.)
db:check_protected_environments
-현재 RAILS_ENV 환경 에서 파괴적인 작업을 수행 할 수 있는지 확인 합니다. db : drop 또는 db : schema : load 와 같은 파괴적인 조치를 실행할 때 내부적으로 사용됩니다 .
답변
