레일스에서 migration 파일이 계속 늘어나면 어떻게 해야 하나요?

레일스에서 프로젝트를 하다보면 migration 파일이 계속 늘어나쟎아요. 예를 들어 서비스 운영이 몇년 되면 파일이 수천개도 될꺼 같은데, 이럴때 어떻게 줄일 수 있는 방법이 있나요?

1답변

  • 좋아요

    7

    싫어요
    채택취소하기

    Ruby 스키마 포맷(db/schema.rb)을 사용하는 경우, 최신 Schema를 Dump 받은 다음 새로운 migration 파일을 생성 한 뒤, schema.rb 안에 있는 코드를 up method에 모두 넣으시고 migration의 timestamp를 해당 schema가 생성된 timestamp로 변경해줍니다. 그 다음 이전 migration 파일들을 삭제하시면 됩니다.

    class SquashMigration < ActiveRecord::Migration
      def up
        create_table "table", :force => true do |t|
        ...
      end
    
      def down
        raise ActiveRecord::IrreversibleMigration
      end
    end
    

    schema.rb 파일 상단에 있는 version 값으로 해당 migration의 timestamp를 변경하시면 됩니다.

    ActiveRecord::Schema.define(:version => 20150409024149) do
      ...
    end
    

    Sql 스키마 포맷(db/structure.sql)을 사용하시는 경우, 위와 동일하나

    db/structure.sql 파일을 Copy 하신 다음 (e.g. structure_backup.sql)

    class SquashMigration < ActiveRecord::Migration
      def up
        sql_data = File.read('db/structure_backup.sql')
        ActiveRecord::Base.connection.execute sql_data
      end
    
      def down
        raise ActiveRecord::IrreversibleMigration
      end
    end
    

    이렇게 하시면 될 거 같습니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.