Migration 제작하기


커맨드창에서

1
$ rails generate migration MigrationCalledBlahBlah
cs


를 치면 db/migrate 폴더안에 파일이 하나 생성된다. 긴 숫자들이 나열된 제목을 볼수있는데 (e.g. 20160421110101_...)

(년도/월/일/시/분/초_제목).rb 으로 구성되어있다.


모델(Model)을 제작하면 migration 파일이 자동으로 만들어 진다.

이 경우엔 그냥 migration 파일 수정할 필요 없이 바로 db:migrate 하면 된다.







Migration 수정하기


migration 파일안에 이미 정의된 change 메소드 안에서 db를 수정하는 방법을 정의할수 있다.




레일즈는 여러가지 수정 메소드를 제공한다.



생성:

  • create_table(name, options): 

name 이라는 db 테이블을 만든다. option에는 "DEFAULT CHARSET=UTF-8" 같은 정의를 테이블에 넣는다.


  • add_column(table_name, column_name, type, options): 

table_name 이라는 테이블에 column_name 이라는 열(column)을 추가한다. 

열의 타입은 db의 타입을 따른다(e.g. :string, :text, :integer...etc).

option 에는 { default: 0 } 같은 잡다한것을 설정할수 있다.



수정:

  • change_column(table_name, column_name, type, options):

add_column과 비슷하며 테이블의 열을 수정할때 쓰인다.


  • rename_column(table_name, column_name, new_column_name):

열의 이름만 바꾼다. 내용물을 보존한다.


  • rename_table(old_name, new_name):

위에와 비슷.



제거:

  • drop_table(name): name이라는 테이블을 제거한다.


  • remove_column(table_name, column_name, type, options): 명시된 열을 명시된 테이블에서 제거한다.




더 많은 메소드는  API  에서 찾아볼수 있다.




사용 예시:

1
2
3
4
5
class AddFieldnameToTablename < ActiveRecord::Migration[5.0]
  def change
    add_column :tablenames, :fieldname, :string
  end
end
cs






Migration 적용하기



다 수정했으면 커맨드창에서

1
 $ rails db:migrate 
cs


을 치면 된다.


주의할 점은 이미 한번 적용된 migration 파일은 수정해도 rails가 무시해버린다.

그렇기 때문에 db를 수정하고 싶다면 migration 파일을 새로 만들어야 한다.[각주:1]


수정된 db는 db/schema.rb 에서 대략적으로 파악할 수 있다.




다른 유용한 db 커맨드들:

  • db:migrate:status

migration 관련 히스토리를 불러온다. 아직 적용 안된 놈이나 step을 알아볼때 사용한다.


  • db:rollback STEP=2

migration을 명시된 STEP의 migration으로 회귀한다.


  • db:reset

db를 완전히 초기화 시킨다. db:drop 과 db:setup을 순차적으로 실행해준다.


  • db:migrate RAILS_ENV=test

일반 migrate 명령은 development 환경에서 실행된다. 이건 test 환경에서 실행되게 한다.










참조: 

http://edgeguides.rubyonrails.org/active_record_migrations.html


http://api.rubyonrails.org/classes/ActiveRecord/Migration.html


http://vaidehijoshi.github.io/blog/2015/05/19/the-secret-life-of-your-database-part-1-migrations/

  1. http://edgeguides.rubyonrails.org/active_record_migrations.html#changing-existing-migrations [본문으로]

+ Recent posts