Programing

한 번만 마이그레이션

lottogame 2020. 9. 10. 08:20
반응형

한 번만 마이그레이션


내 레일 앱에서 전체 무리 중 하나의 마이그레이션 만 실행하려고합니다. 어떻게 할 수 있습니까? 이전 또는 이후에 마이그레이션을 실행하고 싶지 않습니다. 감사.


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이며 프로덕션에서이 작업을 권장하지는 않지만 트릭을 수행합니다.

  1. 디렉토리에서 재실행하려는 마이그레이션을 임시 위치로 이동하십시오.
  2. 동일한 이름으로 다른 마이그레이션 생성
  3. 원본 마이그레이션 코드를 새로 생성 된 마이그레이션 파일에 복사 / 붙여 넣기
  4. 새 마이그레이션 실행
  5. 새로 생성 된 마이그레이션 파일 삭제
  6. 스키마 마이그레이션을 편집하여 가장 최근 값을 제거하십시오.
  7. 이전 마이그레이션 파일 복원

참고URL : https://stackoverflow.com/questions/1331367/rake-just-one-migration

반응형