답변:
rake db:migrate:redo VERSION=xxxxxxx
,하지만 down
그러면 up
단계 가 실행됩니다 . 일시적으로 다운 단계를 주석 처리하는 것과 함께이 작업을 수행 할 수 있습니다.
rake -T
.
db:test:prepare
또한 해당 목록에 표시되지 않습니다. 파티에 늦었 어.
rake db:migrate:up VERSION=my_version
작업 도 수행하지 않을 수 있습니다. 같은 상황에서 rake db:migrate:redo VERSION=my_version
수 실패 는 테이블을 삭제할 수 없습니다 때문입니다. 이 경우 down
마이그레이션 방법을 임시로 주석 처리 하고 다시 실행하십시오rake db:migrate:redo...
rake db:migrate:up VERSION=1234567890
유사하게 rake db:migrate:down
특정 마이그레이션을 중단합니다. 사용 가능한 레이크 작업 목록은 rake -T
.
VERSION
여기에 언급 (가 작성되었을 때의 바로 타임 스탬프입니다) 마이그레이션 각 파일의 시작 부분에 정수 값입니다. 예 : VERSION=20150720023630
.
VERSION
것은 환경 변수 일 뿐이므로 명령에서 먼저 오거나 명령 이전에 설정할 수도 있습니다.VERSION=1234567890 rake db:migrate:up
변경된 단일 마이그레이션을 실행해야했고 다른 모든 마이그레이션과 독립적으로 다시 실행해야했습니다. 콘솔을 시작하고 다음을 수행하십시오.
>> require 'db/migrate/your_migrations.rb'
=> ["YourMigrations"]
>> YourMigrations.up
=> etc... as the migration runs
>> YourMigration.down
더 유용하게 이것은 레이크 작업 등에 넣을 수 있습니다.
change
실행하십시오.YourMigrations.migrate(:up)
(또는 대신 :down
! 너무)
require "#{Rails.root}/db/migrate/your_migrations.rb"
rake db:migrate VERSION=20098252345
시도해보세요.
VERSION
은 환경 변수 일 뿐이므로 명령에서 먼저 오거나 명령 이전에 설정할 수도 있습니다.VERSION=20098252345 rake db:migrate
위의 korch의 답변을 확장하면 require
저에게는 효과가 없었지만 효과 load
가있었습니다. 구체적으로 마이그레이션 파일의 경우 :
class ChangeMinQuantityToRaces < ActiveRecord::Migration
def change
change_column :races, :min_quantity, :integer, :default => 0
end
end
콘솔 타이핑에서
> load 'db/migrate/30130925110821_change_min_quantity_to_races.rb'
> ChangeMinQuantityToRaces.new.change
나를 위해 일했습니다.
> Race.new.min_quantity # => 0
루비 1.9.3p484 (2013-11-22 개정 43786) [x86_64-linux] 및 Rails 3.2.13 용입니다.
이 같은 문제가 발생했기 때문에 여기에 2 ¢ 추가 :
새 마이그레이션을 만들지 않고 마이그레이션을 다시 실행하려는 경우 다음을 수행 할 수 있습니다.
rails dbconsole -p
devdb=# delete from public.schema_migrations where version = '20150105181157';
그리고 rails는 20150105181157에 대한 마이그레이션을 실행했다는 것을 "잊습니다". 이제 db : migrate를 실행하면 다시 실행됩니다.
이것은 거의 항상 나쁜 생각입니다. 이해가 될 수있는 한 가지 예는 개발 브랜치가 있고 아직 마이그레이션을 구체화하지 않았고 개발 중에 몇 가지를 추가하려는 경우입니다. 하지만 그래도 마이그레이션을 양방향으로 만드는 것이 좋습니다. 그래야 적절하게 롤백하고 반복적으로 재 시도 할 수 있습니다.
콘솔을 통해 마이그레이션 클래스를 실행하는 방법이 있어야합니다. 마이그레이션 코드를 인식 할 수없는 것 같습니다.
그러나 의견에서 알 수 있듯이 마이그레이션을 순서대로 실행하는 것이 좋습니다. 사용하다:
rake db:migrate VERSION=##########
스크립트 / 콘솔로 마이그레이션 할 때 코드를 복사하여 붙여 넣으시겠습니까?
나는 이것을 개발에서 매우 쉽게 만드는 유틸리티 방법이 있습니다. 마이그레이션이 너무 많이 생성되는 것을 방지하는 데 도움이된다는 것을 알게되었습니다. 일반적으로 마이그레이션이 배포 될 때까지 수정합니다.
http://fullware.net/index.php/2011/05/26/easily-load-rails-migrations-for-console-execution/
마이그레이션을 상당히 많이 변경할 때 개발에이 기술을 사용하고, 마이그레이션 과정에서 데이터를 잃어 버리고 싶지는 않습니다 (특히 시간이 오래 걸리는 레거시 데이터를 가져올 때 다시 가져올 필요가 없습니다).
이것은 100 % hackish이며 프로덕션에서 이것을 권장하지는 않지만 트릭을 수행합니다.
STEP=n
로 인수를db:migrate
(여기서n
실행하려면 마이그레이션의 수가있다처럼입니다db:rollback
) - 당신이 할 수있는rake db:migrate STEP=1
또는rake db:migrate STEP=2
등