programing

단일 마이그레이션 파일 실행

copysource 2023. 6. 4. 17:52
반응형

단일 마이그레이션 파일 실행

단일 마이그레이션을 쉽게 실행할 수 있는 방법이 있습니까?특정 버전으로 마이그레이션하지 않고 특정 버전만 실행합니다.

상당히 최신 버전의 레일을 언제든지 실행할 수 있다고 가정합니다.

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"를 다시 실행하는 단계입니다.

  1. 콘솔 모드를 실행합니다.(1983 c)
  2. 해당 파일에 있는 클래스를 콘솔로 복사하여 전달합니다.

    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
    
  3. 클래스의 인스턴스를 만듭니다.CreateUsers:c1 = CreateUsers.new

  4. 메서드 실행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

반응형