단일 마이그레이션 파일 실행
단일 마이그레이션을 쉽게 실행할 수 있는 방법이 있습니까?특정 버전으로 마이그레이션하지 않고 특정 버전만 실행합니다.
상당히 최신 버전의 레일을 언제든지 실행할 수 있다고 가정합니다.
rake db:migrate:up VERSION=20090408054532
여기서 version은 마이그레이션 파일의 타임스탬프입니다.
편집: 지난 8년 동안의 어느 시점(어떤 버전인지 확실하지 않음)에 레일즈는 이미 실행된 경우 이를 실행하지 못하도록 하는 검사를 추가했습니다.이는 다음의 항목으로 표시됩니다.schema_migrations
테이블. 다시 실행하려면 간단히 실행rake db:migrate:redo VERSION=20090408054532
대신.
루비 파일에서 직접 코드를 실행할 수 있습니다.
rails console
>> require "db/migrate/20090408054532_add_foos.rb"
>> AddFoos.new.up
참고: 매우 오래된 버전의 레일에는AddFoos.up
보다는AddFoos.new.up
마이그레이션에 "변경" 방법이 있는 경우 다음을 실행해야 합니다.AddFoos.new.change
.
IRB가 없는 대체 방법은 클래스 이름 배열을 반환해야 한다는 사실에 의존합니다.
script/runner 'require("db/migrate/20090408054532_add_foos.rb").first.constantize.up'
이렇게 하면 업데이트되지 않습니다.schema_migrations
테이블, 하지만 어쨌든 그것이 당신이 원하는 것처럼 보입니다.
또한 파일을 찾을 수 없는 경우 사용해야 할 수도 있습니다.require("./db/..."
또는 시도require_relative
작업 디렉터리에 따라
$ rake db:migrate:up VERSION=20080906120000
마이그레이션을 여러 번 실행하려면 다음을 수행합니다.
# use the STEP parameter if you need to go more than one version back
$ rake db:migrate:redo STEP=3
단일 마이그레이션을 여러 번 실행하려면 다음 작업을 수행합니다.
# this is super useful
$ rake db:migrate:redo VERSION=20080906120000
(버전 번호는 마이그레이션 파일 이름에서 확인할 수 있습니다.)
편집: 마이그레이션 파일의 이름을 간단하게 변경할 수도 있습니다. 예:
20151013131830_my_migration.rb
->20151013131831_my_migration.rb
그런 다음 정상적으로 마이그레이션하면 마이그레이션이 새 마이그레이션으로 처리됩니다(스테이징과 같은 원격 환경에서 마이그레이션하려는 경우 유용).
편집 2: 데이터베이스의 마이그레이션 항목을 삭제할 수도 있습니다.예:
rails_c> q = "delete from schema_migrations where version = '20151013131830'"
rails_c> ActiveRecord::Base.connection.execute(q)
rake db:migrate
그런 다음 다시 실행합니다.up
핵 이동 방법.
구현한 경우change
다음과 같은 방법:
class AddPartNumberToProducts < ActiveRecord::Migration
def change
add_column :products, :part_number, :string
end
end
마이그레이션 인스턴스를 생성하고 실행할 수 있습니다.migrate(:up)
또는migrate(:down)
예를 들어, 다음과 같은 경우:
$ rails console
>> require "db/migrate/20090408054532_add_part_number_to_products.rb"
>> AddPartNumberToProducts.new.migrate(:down)
이 마이그레이션 파일 "20150927161307_create_users.rb"를 다시 실행하는 단계입니다.
- 콘솔 모드를 실행합니다.(1983 c)
해당 파일에 있는 클래스를 콘솔로 복사하여 전달합니다.
class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.string :name t.string :email t.timestamps null: false end end end end
클래스의 인스턴스를 만듭니다.
CreateUsers
:c1 = CreateUsers.new
- 메서드 실행
change
그 경우:c1.change
현재rails 5
사용할 수도 있습니다.rails
대신에rake
레일 3 - 4
# < rails-5.0
rake db:migrate:up VERSION=20160920130051
레일 5
# >= rails-5.0
rake db:migrate:up VERSION=20160920130051
# or
rails db:migrate:up VERSION=20160920130051
사용할 수 있는 경로에 문제가 있는 경우
require Rails.root + 'db/migrate/20090408054532_add_foos.rb'
콘솔에서 실행하려면 다음과 같이 하십시오.
$ rails console
irb(main)> require "#{Rails.root.to_s}/db/migrate/XXXXX_my_migration.rb"
irb(main)> AddFoo.migrate(:up)
는 다른 답을 , 하지 않고 요구했습니다.Rails.root
나를 위해 일하지 않았습니다.
또한..migrate(:up)
되도록 합니다.part는 마이그레이션을 실행합니다.이 기능은 이미 마이그레이션을 실행하고 DB를 조작하여 마이그레이션을 취소한 경우에 유용하며, 마이그레이션을 다시 시작할 수 있는 빠른 솔루션을 원하는 경우에 유용합니다.
방법 1:
rake db:migrate:up VERSION=20080906120000
방법 2:.
레일 콘솔 1에서.콘솔에 마이그레이션 클래스를 복사하여 붙여넣습니다(예: add_name_to_user.rb) 2.그런 다음 콘솔에서 다음을 입력합니다.
Sharding.run_on_all_shards{AddNameToUser.up}
끝났습니다!!
대신 이 점에 유의하시기 바랍니다.script/runner
사용해야 할 수도 있습니다.rails runner
새로운 레일 환경에서.
적어도 최신 Rails 릴리스(작성 당시 5.2)에서는 실행 중인 마이그레이션을 필터링하는 방법이 하나 더 있는 것 같습니다.는 통킬과수있다니습으로 할 수 .SCOPE
마이그레이션 파일을 선택하는 데 사용되는 환경 변수입니다.
개의 파일이 합니다.1_add_foos.rb
그리고.2_add_foos.run_this_one.rb
SCOPE=run_this_one rails db:migrate:up
됩니다.2_add_foos.run_this_one.rb
범위와 일치하는 모든 마이그레이션 파일이 실행됩니다.
언급URL : https://stackoverflow.com/questions/753919/run-a-single-migration-file
'programing' 카테고리의 다른 글
PHP 배열의 값을 지우기 위해 각 루프에 사용하는 효율성 (0) | 2023.06.04 |
---|---|
이제 iPhone에서 MonoTouch가 금지됩니까? (0) | 2023.06.04 |
Android:텍스트 편집을 강제로 수행하여 포커스를 제거하시겠습니까? (0) | 2023.06.04 |
스위프트 스위치 문보다 작거나 큼 (0) | 2023.06.04 |
레일 3: JSON 요청 오류를 반환하는 방법 (0) | 2023.03.26 |