comparison lib/tasks/redmine.rake @ 1517:dffacf8a6908 redmine-2.5

Update to Redmine SVN revision 13367 on 2.5-stable branch
author Chris Cannam
date Tue, 09 Sep 2014 09:29:00 +0100
parents e248c7af89ec
children
comparison
equal deleted inserted replaced
1516:b450a9d58aed 1517:dffacf8a6908
49 49
50 desc 'Migrates and copies plugins assets.' 50 desc 'Migrates and copies plugins assets.'
51 task :plugins do 51 task :plugins do
52 Rake::Task["redmine:plugins:migrate"].invoke 52 Rake::Task["redmine:plugins:migrate"].invoke
53 Rake::Task["redmine:plugins:assets"].invoke 53 Rake::Task["redmine:plugins:assets"].invoke
54 end
55
56 desc <<-DESC
57 FOR EXPERIMENTAL USE ONLY, Moves Redmine data from production database to the development database.
58 This task should only be used when you need to move data from one DBMS to a different one (eg. MySQL to PostgreSQL).
59 WARNING: All data in the development database is deleted.
60 DESC
61
62 task :migrate_dbms => :environment do
63 ActiveRecord::Base.establish_connection :development
64 target_tables = ActiveRecord::Base.connection.tables
65 ActiveRecord::Base.remove_connection
66
67 ActiveRecord::Base.establish_connection :production
68 tables = ActiveRecord::Base.connection.tables.sort - %w(schema_migrations plugin_schema_info)
69
70 if (tables - target_tables).any?
71 abort "The following table(s) are missing from the target database: #{(tables - target_tables).join(', ')}"
72 end
73
74 tables.each do |table_name|
75 Source = Class.new(ActiveRecord::Base)
76 Target = Class.new(ActiveRecord::Base)
77 Target.establish_connection(:development)
78
79 [Source, Target].each do |klass|
80 klass.table_name = table_name
81 klass.reset_column_information
82 klass.inheritance_column = "foo"
83 klass.record_timestamps = false
84 end
85 Target.primary_key = (Target.column_names.include?("id") ? "id" : nil)
86
87 source_count = Source.count
88 puts "Migrating %6d records from #{table_name}..." % source_count
89
90 Target.delete_all
91 offset = 0
92 while (objects = Source.offset(offset).limit(5000).order("1,2").to_a) && objects.any?
93 offset += objects.size
94 Target.transaction do
95 objects.each do |object|
96 new_object = Target.new(object.attributes)
97 new_object.id = object.id if Target.primary_key
98 new_object.save(:validate => false)
99 end
100 end
101 end
102 Target.connection.reset_pk_sequence!(table_name) if Target.primary_key
103 target_count = Target.count
104 abort "Some records were not migrated" unless source_count == target_count
105 end
54 end 106 end
55 107
56 namespace :plugins do 108 namespace :plugins do
57 desc 'Migrates installed plugins.' 109 desc 'Migrates installed plugins.'
58 task :migrate => :environment do 110 task :migrate => :environment do