Sha256: d28b2242918230c90fdcdd7771825d9f180df3172e060eef9669ce6d1e5b2269

Contents?: true

Size: 1.43 KB

Versions: 13

Compression:

Stored size: 1.43 KB

Contents

require 'rubygems'
require 'fileutils'
require 'logger'
require 'jiji/util/file_lock'

module JIJI
  module Migration
    
    #==サーバー起動時にデータ移行を行うクラス。
    class Migrator

      #データを移行する。
      def migrate
        logger = server_logger
        begin
          data_version = version
          new_version = data_version
          tmp = nil
          @migrators.sort_by {|item| item[:version] }.each {|d|
            tmp = d[:version]
            if ( data_version < d[:version] )
              d[:migrator].migrate(registry)
              new_version = d[:version]
              logger.info "data migration succesful! new_version=#{new_version.to_s}."
            end
          }
        rescue Exception
          logger.error "data migration failed. current=#{data_version.to_s} new_version=#{tmp.to_s}"
          logger.error $!
        ensure
          FileLock.new( version_file ).writelock {|f| f << new_version.to_s }
        end
      end
      
      # 現在のデータバージョンを取得する。
      def version
        version_str = File.exist?(version_file) ? 
          FileLock.new( version_file ).readlock {|f| f.read } : "1.0.0"
        return Gem::Version.new( version_str )
      end
      
      attr :migrators, true
      attr :server_logger, true
      attr :version_file, true
      attr :registry, true
    end
  end
end

Version data entries

13 entries across 13 versions & 2 rubygems

Version Path
unageanu-jiji-1.0.3 lib/jiji/migration/migrator.rb
unageanu-jiji-1.1.0 lib/jiji/migration/migrator.rb
unageanu-jiji-1.1.1 lib/jiji/migration/migrator.rb
unageanu-jiji-1.1.2 lib/jiji/migration/migrator.rb
unageanu-jiji-1.1.3 lib/jiji/migration/migrator.rb
unageanu-jiji-1.1.4 lib/jiji/migration/migrator.rb
unageanu-jiji-1.2.1 lib/jiji/migration/migrator.rb
unageanu-jiji-1.2.3 lib/jiji/migration/migrator.rb
unageanu-jiji-1.2.4 lib/jiji/migration/migrator.rb
jiji-1.2.8 lib/jiji/migration/migrator.rb
jiji-1.2.7 lib/jiji/migration/migrator.rb
jiji-1.2.6 lib/jiji/migration/migrator.rb
jiji-1.2.5 lib/jiji/migration/migrator.rb