한 번만 마이그레이션
내 레일 앱에서 전체 무리 중 하나의 마이그레이션 만 실행하려고합니다. 어떻게 할 수 있습니까? 이전 또는 이후에 마이그레이션을 실행하고 싶지 않습니다. 감사.
rake db:migrate:redo VERSION=xxxxxxx
,하지만 down
그러면 up
단계 가 실행됩니다 . 일시적으로 다운 단계를 주석 처리하는 것과 함께이 작업을 수행 할 수 있습니다.
rake db:migrate:up VERSION=1234567890
유사하게 rake db:migrate:down
특정 마이그레이션을 중단합니다. 사용 가능한 레이크 작업 목록은 rake -T
.
변경된 단일 마이그레이션을 실행해야했고 다른 모든 마이그레이션과 독립적으로 다시 실행해야했습니다. 콘솔을 시작하고 다음을 수행하십시오.
>> require 'db/migrate/your_migrations.rb'
=> ["YourMigrations"]
>> YourMigrations.up
=> etc... as the migration runs
>> YourMigration.down
더 유용하게 이것은 레이크 작업 등에 넣을 수 있습니다.
rake db:migrate:up VERSION=version_no
특정 마이그레이션 스크립트를 마이그레이션 (추가)합니다.
rake db:migrate:down VERSION=version_no
특정 마이그레이션 스크립트를 삭제합니다.
rake db:migrate VERSION=20098252345
시도해보세요.
위의 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 용입니다.
rake db:migrate:redo version='xxxx'
xxxx를 따옴표로 묶어야합니다. xxxx는 마이그레이션의 타임 스탬프 (또는 마이그레이션 ID)입니다.
다음을 사용하여 이전에 수행 한 마이그레이션에 대한 타임 스탬프 (마이그레이션 ID)를 확인할 수 있습니다.
rake db:migrate:status
이 같은 문제가 발생했기 때문에 여기에 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이며 프로덕션에서이 작업을 권장하지는 않지만 트릭을 수행합니다.
- 디렉토리에서 재실행하려는 마이그레이션을 임시 위치로 이동하십시오.
- 동일한 이름으로 다른 마이그레이션 생성
- 원본 마이그레이션 코드를 새로 생성 된 마이그레이션 파일에 복사 / 붙여 넣기
- 새 마이그레이션 실행
- 새로 생성 된 마이그레이션 파일 삭제
- 스키마 마이그레이션을 편집하여 가장 최근 값을 제거하십시오.
- 이전 마이그레이션 파일 복원
참고URL : https://stackoverflow.com/questions/1331367/rake-just-one-migration
'Programing' 카테고리의 다른 글
Android L- 미리보기 용 RecyclerView를 가져 오는 방법 (0) | 2020.09.10 |
---|---|
eclipse.ini -vm 옵션을 어떻게 설정합니까? (0) | 2020.09.10 |
RuntimeException : 콘텐츠에는 id 속성이 'android.R.id.list'인 ListView가 있어야합니다. (0) | 2020.09.10 |
SecurityException을 발생시키지 않고 런타임에 권한을 어떻게 확인할 수 있습니까? (0) | 2020.09.10 |
Android Room-단순 선택 쿼리-기본 스레드에서 데이터베이스에 액세스 할 수 없음 (0) | 2020.09.10 |