[ruby-on-rails] 단일 마이그레이션 파일을 실행하십시오.

단일 마이그레이션을 실행하는 쉬운 방법이 있습니까? 특정 버전으로 마이그레이션하고 싶지 않고 특정 버전을 실행하고 싶습니다.



답변

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

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테이블이 업데이트되지 않지만 어쨌든 원하는 것처럼 보입니다.


답변

최신 버전의 Rails를 가정하면 언제든지 다음을 실행할 수 있습니다.

rake db:migrate:up VERSION=20090408054532

여기서 version은 마이그레이션 파일 이름의 타임 스탬프입니다.

편집 : 지난 8 년 동안 어느 시점에서 (어떤 버전인지 확실하지 않습니다) Rails는 이미 실행 된 경우이를 실행하지 못하게하는 검사를 추가했습니다. 이것은 schema_migrations테이블 의 항목으로 표시됩니다 . 다시 실행하려면 간단히 실행하십시오 rake db:migrate:redo VERSION=20090408054532.


답변

특정 마이그레이션실행 하려면 다음을 수행하십시오.

$ 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그런 다음 upnuked 마이그레이션 방법 을 다시 실행합니다 .


답변

다음 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. 콘솔 모드를 실행하십시오. (레일 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'