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

조회수 1712회

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

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 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
    

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

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)