복붙노트

[RUBY-ON-RAILS] 하나의 마이그레이션 파일을 실행

RUBY-ON-RAILS

하나의 마이그레이션 파일을 실행

하나의 마이그레이션을 실행하는 쉬운 방법이 있나요? 난 그냥 특정 하나를 실행하려는 특정 버전으로 마이그레이션하고 싶지 않아요.

해결법

  1. ==============================

    1.당신은 루비 파일에서 직접 코드를 실행할 수 있습니다 :

    당신은 루비 파일에서 직접 코드를 실행할 수 있습니다 :

    rails console
    >> require "db/migrate/20090408054532_add_foos.rb"
    >> AddFoos.up
    

    주 : 레일의 최신 버전은 AddFoos.new.up보다는 AddFoos.up가 필요할 수 있습니다.

    반환 클래스 이름의 배열을 필요로하는 사실에 의존한다 (IRB없이) 다른 방법 :

    script/runner 'require("db/migrate/20090408054532_add_foos.rb").first.constantize.up'
    

    참고이 작업을 수행 할 경우, 그것은 아마도 schema_migrations 테이블을 업데이트하지 않습니다,하지만 당신이 어쨌든 원하는 것처럼 그것은 보인다.

  2. ==============================

    2.당신은 항상 실행할 수있는 레일의 비교적 최신 버전의 가정 :

    당신은 항상 실행할 수있는 레일의 비교적 최신 버전의 가정 :

    rake db:migrate:up VERSION=20090408054532
    

    어디 버전은 이전의 파일 이름에 타임 스탬프입니다.

    편집 : 지난 팔년 동안 어떤 시점에서 이미 실행 된 경우 실행이되지 않도록 추가 검사를 레일 (나는 확실히 어떤 버전이 아니에요). 이것은 schema_migrations 테이블의 항목으로 표시됩니다. 하는 것이, 단순히 갈퀴 DB를 실행 다시 실행 마이그레이션 : 리두 VERSION = 20090408054532 대신합니다.

  3. ==============================

    3.특정 마이그레이션을 실행하려면 수행

    특정 마이그레이션을 실행하려면 수행

    $ 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)
    

    레이크 dB : 마이그레이션은 다음 핵 공격 마이그레이션의 접속 방법을 다시 실행합니다.

  4. ==============================

    4.이 같은 변화의 방법을 구현 한 경우 :

    이 같은 변화의 방법을 구현 한 경우 :

    class AddPartNumberToProducts < ActiveRecord::Migration
      def change
        add_column :products, :part_number, :string
      end
    end
    

    이 같은 인스턴스 (:까지) 또는 마이그레이션 (아래) 당신은 이동 및 실행 마이그레이션의 인스턴스를 생성 할 수 있습니다 :

    $ rails console
    >> require "db/migrate/20090408054532_add_part_number_to_products.rb"
    >> AddPartNumberToProducts.new.migrate(:down)
    
  5. ==============================

    5.이것은 다시 "20150927161307_create_users.rb을"이 마이그레이션 파일을 실행하는 단계입니다

    이것은 다시 "20150927161307_create_users.rb을"이 마이그레이션 파일을 실행하는 단계입니다

  6. ==============================

    6.당신이 경로에 문제가있는 경우에 당신은 사용할 수 있습니다

    당신이 경로에 문제가있는 경우에 당신은 사용할 수 있습니다

    require Rails.root + 'db/migrate/20090408054532_add_foos.rb'
    
  7. ==============================

    7.레일 5로서 당신은 대신 레이크의 레일을 사용할 수 있습니다

    레일 5로서 당신은 대신 레이크의 레일을 사용할 수 있습니다

    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
    
  8. ==============================

    8.대신 스크립트 / 러너, 당신이 사용 할 수 있습니다 통지는 새로운 레일 환경에 주자 레일하십시오.

    대신 스크립트 / 러너, 당신이 사용 할 수 있습니다 통지는 새로운 레일 환경에 주자 레일하십시오.

  9. ==============================

    9.방법 1 :

    방법 1 :

    rake db:migrate:up VERSION=20080906120000
    

    방법 2 :

    레일 콘솔  1. 복사 콘솔의 마이그레이션 클래스를 붙여 (예를 들어 add_name_to_user.rb)  2. 그런 다음 콘솔에서 다음을 입력

    Sharding.run_on_all_shards{AddNameToUser.up}
    

    그것은 이루어집니다!

  10. ==============================

    10.당신이 콘솔에서 실행하려면이 당신이 찾고있는 것입니다 :

    당신이 콘솔에서 실행하려면이 당신이 찾고있는 것입니다 :

    $ rails console
    irb(main)> require "#{Rails.root.to_s}/db/migrate/XXXXX_my_migration.rb"
    irb(main)> AddFoo.migrate(:up)
    

    나는 다른 답변을했지만, Rails.root없이 필요로하는 것은 나를 위해 일을 일부러.

    또한, .migrate (:까지) 이미 실행하거나하지 않은 경우 일부 세력 마이그레이션에 관계없이 다시 실행합니다. 이것은 당신이 이미 마이그레이션을 실행할 때 유용합니다, DB를 만지작가 좀 그것을 취소하고 다시 그것을 가지고 빠른 솔루션을 원한다.

  11. ==============================

    11.외모는 최신 레일 릴리스 (글을 쓰는 시점에서 5.2)으로 실행되는 마이그레이션을 필터링하는 또 하나 개의 방법이 적어도 좋아한다. 하나는 다음 마이그레이션 파일을 선택하기 위해 사용되는 범위 환경 변수에 필터를 전달할 수 있습니다.

    외모는 최신 레일 릴리스 (글을 쓰는 시점에서 5.2)으로 실행되는 마이그레이션을 필터링하는 또 하나 개의 방법이 적어도 좋아한다. 하나는 다음 마이그레이션 파일을 선택하기 위해 사용되는 범위 환경 변수에 필터를 전달할 수 있습니다.

    두 마이그레이션 파일이 가정 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 실행됩니다. 범위를 일치하는 모든 마이그레이션 파일이 실행 된 것입니다 있음을 유의하십시오.

  12. from https://stackoverflow.com/questions/753919/run-a-single-migration-file by cc-by-sa and MIT license