Mercurial > hg > soundsoftware-site
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 |