Migration 제작하기
커맨드창에서
| $ 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 에서 찾아볼수 있다.
사용 예시:
| class AddFieldnameToTablename < ActiveRecord::Migration[5.0] def change add_column :tablenames, :fieldname, :string end end | cs |
Migration 적용하기
다 수정했으면 커맨드창에서
을 치면 된다.
주의할 점은 이미 한번 적용된 migration 파일은 수정해도 rails가 무시해버린다.
그렇기 때문에 db를 수정하고 싶다면 migration 파일을 새로 만들어야 한다.
수정된 db는 db/schema.rb 에서 대략적으로 파악할 수 있다.
다른 유용한 db 커맨드들:
migration 관련 히스토리를 불러온다. 아직 적용 안된 놈이나 step을 알아볼때 사용한다.
migration을 명시된 STEP의 migration으로 회귀한다.
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/