data_migrate 3.2.0 → 11.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/Changelog.md +246 -2
- data/README.md +107 -91
- data/lib/capistrano/data_migrate/migrate.rb +3 -4
- data/lib/data_migrate/config.rb +33 -0
- data/lib/data_migrate/data_migrator.rb +54 -58
- data/lib/data_migrate/data_schema.rb +63 -0
- data/lib/data_migrate/data_schema_migration.rb +23 -6
- data/lib/data_migrate/database_configurations_wrapper.rb +11 -0
- data/lib/data_migrate/database_tasks.rb +290 -0
- data/lib/data_migrate/migration_context.rb +93 -0
- data/lib/data_migrate/rails_helper.rb +91 -0
- data/lib/data_migrate/schema_dumper.rb +38 -0
- data/lib/data_migrate/schema_migration.rb +41 -0
- data/lib/data_migrate/status_service.rb +58 -0
- data/lib/data_migrate/tasks/data_migrate_tasks.rb +107 -0
- data/lib/data_migrate/version.rb +1 -1
- data/lib/data_migrate.rb +20 -7
- data/lib/generators/data_migrate.rb +15 -2
- data/lib/generators/data_migration/data_migration_generator.rb +22 -21
- data/lib/generators/data_migration/templates/data_migration.rb +4 -2
- data/tasks/databases.rake +115 -228
- metadata +64 -42
- data/.gitignore +0 -6
- data/.rspec +0 -3
- data/.travis.yml +0 -17
- data/Appraisals +0 -21
- data/Gemfile +0 -4
- data/Gemfile.rails5 +0 -5
- data/Gemfile.rails5.1 +0 -5
- data/Rakefile +0 -2
- data/data_migrate.gemspec +0 -39
- data/gemfiles/rails_4.0.gemfile +0 -7
- data/gemfiles/rails_4.1.gemfile +0 -7
- data/gemfiles/rails_4.2.gemfile +0 -8
- data/gemfiles/rails_5.0.gemfile +0 -7
- data/gemfiles/rails_5.1.gemfile +0 -7
- data/lib/data_migrate/migration.rb +0 -26
- data/lib/data_migrate/migration_five.rb +0 -26
- data/screenshot.png +0 -0
- data/spec/data_migrate/data_migrator_spec.rb +0 -45
- data/spec/data_migrate/data_schema_migration_spec.rb +0 -16
- data/spec/data_migrate/migration.rb +0 -19
- data/spec/generators/data_migration/data_migration_generator_spec.rb +0 -27
- data/spec/spec_helper.rb +0 -5
- data/tasks/.gitkeep +0 -0
data/tasks/databases.rake
CHANGED
@@ -1,69 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'data_migrate/tasks/data_migrate_tasks'
|
4
|
+
|
1
5
|
namespace :db do
|
2
6
|
namespace :migrate do
|
3
7
|
desc "Migrate the database data and schema (options: VERSION=x, VERBOSE=false)."
|
4
|
-
task :with_data => :
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
target_version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
9
|
-
migrations = []
|
10
|
-
|
11
|
-
if target_version.nil?
|
12
|
-
migrations = pending_migrations.map{ |m| m.merge(:direction =>:up) }
|
13
|
-
else
|
14
|
-
current_schema_version = ActiveRecord::Migrator.current_version
|
15
|
-
schema_migrations = if target_version > current_schema_version
|
16
|
-
pending_schema_migrations.keep_if{ |m| m[:version] <= target_version }.map{ |m| m.merge(:direction =>:up) }
|
17
|
-
elsif target_version < current_schema_version
|
18
|
-
past_migrations.keep_if{ |m| m[:version] > target_version }.map{ |m| m.merge(:direction =>:down) }
|
19
|
-
else # ==
|
20
|
-
[]
|
21
|
-
end
|
22
|
-
|
23
|
-
current_data_version = ActiveRecord::Migrator.current_version
|
24
|
-
data_migrations = if target_version > current_data_version
|
25
|
-
pending_data_migrations.keep_if{ |m| m[:version] <= target_version }.map{ |m| m.merge(:direction =>:up) }
|
26
|
-
elsif target_version < current_data_version
|
27
|
-
past_migrations.keep_if{ |m| m[:version] > target_version }.map{ |m| m.merge(:direction =>:down) }
|
28
|
-
else # ==
|
29
|
-
[]
|
30
|
-
end
|
31
|
-
migrations = if schema_migrations.empty?
|
32
|
-
data_migrations
|
33
|
-
elsif data_migrations.empty?
|
34
|
-
schema_migrations
|
35
|
-
elsif target_version > current_data_version && target_version > current_schema_version
|
36
|
-
sort_migrations data_migrations, schema_migrations
|
37
|
-
elsif target_version < current_data_version && target_version < current_schema_version
|
38
|
-
sort_migrations(data_migrations, schema_migrations).reverse
|
39
|
-
elsif target_version > current_data_version && target_version < current_schema_version
|
40
|
-
schema_migrations + data_migrations
|
41
|
-
elsif target_version < current_data_version && target_version > current_schema_version
|
42
|
-
schema_migrations + data_migrations
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
migrations.each do |migration|
|
47
|
-
if migration[:kind] == :data
|
48
|
-
ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
|
49
|
-
DataMigrate::DataMigrator.run(migration[:direction], "db/data/", migration[:version])
|
50
|
-
else
|
51
|
-
ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
|
52
|
-
ActiveRecord::Migrator.run(
|
53
|
-
migration[:direction],
|
54
|
-
Rails.application.config.paths["db/migrate"],
|
55
|
-
migration[:version]
|
56
|
-
)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
|
8
|
+
task :with_data => :load_config do
|
9
|
+
DataMigrate::DatabaseTasks.migrate_with_data
|
10
|
+
Rake::Task["db:_dump"].invoke
|
11
|
+
Rake::Task["data:dump"].invoke
|
61
12
|
end
|
62
13
|
|
63
14
|
namespace :redo do
|
64
15
|
desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
|
65
16
|
task :with_data => :environment do
|
66
|
-
|
17
|
+
DataMigrate::DataMigrator.create_data_schema_table
|
67
18
|
if ENV["VERSION"]
|
68
19
|
Rake::Task["db:migrate:down:with_data"].invoke
|
69
20
|
Rake::Task["db:migrate:up:with_data"].invoke
|
@@ -79,23 +30,20 @@ namespace :db do
|
|
79
30
|
task :with_data => :environment do
|
80
31
|
version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
81
32
|
raise "VERSION is required" unless version
|
82
|
-
|
33
|
+
DataMigrate::DataMigrator.create_data_schema_table
|
83
34
|
run_both = ENV["BOTH"] == "true"
|
84
|
-
migrations = pending_migrations.keep_if{|m| m[:version] == version}
|
35
|
+
migrations = DataMigrate::DatabaseTasks.pending_migrations.keep_if{|m| m[:version] == version}
|
85
36
|
|
86
37
|
unless run_both || migrations.size < 2
|
87
38
|
migrations = migrations.slice(0,1)
|
88
39
|
end
|
89
40
|
|
90
41
|
migrations.each do |migration|
|
91
|
-
|
92
|
-
ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
|
93
|
-
DataMigrate::DataMigrator.run(:up, "db/data/", migration[:version])
|
94
|
-
else
|
95
|
-
ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
|
96
|
-
ActiveRecord::Migrator.run(:up, "db/migrate/", migration[:version])
|
97
|
-
end
|
42
|
+
DataMigrate::DatabaseTasks.run_migration(migration, :up)
|
98
43
|
end
|
44
|
+
|
45
|
+
Rake::Task["db:_dump"].invoke
|
46
|
+
Rake::Task["data:dump"].invoke
|
99
47
|
end
|
100
48
|
end
|
101
49
|
|
@@ -104,68 +52,27 @@ namespace :db do
|
|
104
52
|
task :with_data => :environment do
|
105
53
|
version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
106
54
|
raise "VERSION is required" unless version
|
107
|
-
|
55
|
+
DataMigrate::DataMigrator.create_data_schema_table
|
108
56
|
run_both = ENV["BOTH"] == "true"
|
109
|
-
migrations = past_migrations.keep_if{|m| m[:version] == version}
|
57
|
+
migrations = DataMigrate::DatabaseTasks.past_migrations.keep_if{|m| m[:version] == version}
|
110
58
|
|
111
59
|
unless run_both || migrations.size < 2
|
112
60
|
migrations = migrations.slice(0,1)
|
113
61
|
end
|
114
62
|
|
115
63
|
migrations.each do |migration|
|
116
|
-
|
117
|
-
ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
|
118
|
-
DataMigrate::DataMigrator.run(:down, "db/data/", migration[:version])
|
119
|
-
else
|
120
|
-
ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
|
121
|
-
ActiveRecord::Migrator.run(:down, "db/migrate/", migration[:version])
|
122
|
-
end
|
64
|
+
DataMigrate::DatabaseTasks.run_migration(migration, :down)
|
123
65
|
end
|
66
|
+
|
67
|
+
Rake::Task["db:_dump"].invoke
|
68
|
+
Rake::Task["data:dump"].invoke
|
124
69
|
end
|
125
70
|
end
|
126
71
|
|
127
72
|
namespace :status do
|
128
73
|
desc "Display status of data and schema migrations"
|
129
74
|
task :with_data => :environment do
|
130
|
-
|
131
|
-
next unless config
|
132
|
-
|
133
|
-
db_list_data = ActiveRecord::Base.connection.select_values("SELECT version FROM #{DataMigrate::DataMigrator.schema_migrations_table_name}")
|
134
|
-
db_list_schema = ActiveRecord::Base.connection.select_values("SELECT version FROM #{ActiveRecord::Migrator.schema_migrations_table_name}")
|
135
|
-
file_list = []
|
136
|
-
|
137
|
-
Dir.foreach(File.join(Rails.root, 'db', 'data')) do |file|
|
138
|
-
# only files matching "20091231235959_some_name.rb" pattern
|
139
|
-
if match_data = /(\d{14})_(.+)\.rb/.match(file)
|
140
|
-
status = db_list_data.delete(match_data[1]) ? 'up' : 'down'
|
141
|
-
file_list << [status, match_data[1], match_data[2], 'data']
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
Dir.foreach(File.join(Rails.root, 'db', 'migrate')) do |file|
|
146
|
-
# only files matching "20091231235959_some_name.rb" pattern
|
147
|
-
if match_data = /(\d{14})_(.+)\.rb/.match(file)
|
148
|
-
status = db_list_schema.delete(match_data[1]) ? 'up' : 'down'
|
149
|
-
file_list << [status, match_data[1], match_data[2], 'schema']
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
file_list.sort!{|a,b| "#{a[1]}_#{a[3] == 'data' ? 1 : 0}" <=> "#{b[1]}_#{b[3] == 'data' ? 1 : 0}" }
|
154
|
-
|
155
|
-
# output
|
156
|
-
puts "\ndatabase: #{config['database']}\n\n"
|
157
|
-
puts "#{"Status".center(8)} #{"Type".center(8)} #{"Migration ID".ljust(14)} Migration Name"
|
158
|
-
puts "-" * 60
|
159
|
-
file_list.each do |file|
|
160
|
-
puts "#{file[0].center(8)} #{file[3].center(8)} #{file[1].ljust(14)} #{file[2].humanize}"
|
161
|
-
end
|
162
|
-
db_list_schema.each do |version|
|
163
|
-
puts "#{'up'.center(8)} #{version.ljust(14)} *** NO SCHEMA FILE ***"
|
164
|
-
end
|
165
|
-
db_list_data.each do |version|
|
166
|
-
puts "#{'up'.center(8)} #{version.ljust(14)} *** NO DATA FILE ***"
|
167
|
-
end
|
168
|
-
puts
|
75
|
+
DataMigrate::Tasks::DataMigrateTasks.status_with_schema
|
169
76
|
end
|
170
77
|
end
|
171
78
|
end # END OF MIGRATE NAME SPACE
|
@@ -174,61 +81,91 @@ namespace :db do
|
|
174
81
|
desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).'
|
175
82
|
task :with_data => :environment do
|
176
83
|
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
177
|
-
|
178
|
-
past_migrations[0..(step - 1)].each do | past_migration |
|
179
|
-
|
180
|
-
ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
|
181
|
-
DataMigrate::DataMigrator.run(:down, "db/data/", past_migration[:version])
|
182
|
-
elsif past_migration[:kind] == :schema
|
183
|
-
ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
|
184
|
-
ActiveRecord::Migrator.run(:down, "db/migrate/", past_migration[:version])
|
185
|
-
end
|
84
|
+
DataMigrate::DataMigrator.create_data_schema_table
|
85
|
+
DataMigrate::DatabaseTasks.past_migrations[0..(step - 1)].each do | past_migration |
|
86
|
+
DataMigrate::DatabaseTasks.run_migration(past_migration, :down)
|
186
87
|
end
|
88
|
+
|
89
|
+
Rake::Task["db:_dump"].invoke
|
90
|
+
Rake::Task["data:dump"].invoke
|
187
91
|
end
|
188
92
|
end
|
189
93
|
|
190
94
|
namespace :forward do
|
191
95
|
desc 'Pushes the schema to the next version (specify steps w/ STEP=n).'
|
192
96
|
task :with_data => :environment do
|
193
|
-
|
194
|
-
# TODO: No worky for .forward
|
97
|
+
DataMigrate::DataMigrator.create_data_schema_table
|
195
98
|
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
if pending_migration[:kind] == :data
|
200
|
-
ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
|
201
|
-
DataMigrate::DataMigrator.run(:up, "db/data/", pending_migration[:version])
|
202
|
-
elsif pending_migration[:kind] == :schema
|
203
|
-
ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
|
204
|
-
ActiveRecord::Migrator.run(:up, "db/migrate/", pending_migration[:version])
|
205
|
-
end
|
206
|
-
end
|
99
|
+
DataMigrate::DatabaseTasks.forward(step)
|
100
|
+
Rake::Task["db:_dump"].invoke
|
101
|
+
Rake::Task["data:dump"].invoke
|
207
102
|
end
|
208
103
|
end
|
209
104
|
|
210
105
|
namespace :version do
|
211
106
|
desc "Retrieves the current schema version numbers for data and schema migrations"
|
212
107
|
task :with_data => :environment do
|
213
|
-
|
108
|
+
DataMigrate::DataMigrator.create_data_schema_table
|
214
109
|
puts "Current Schema version: #{ActiveRecord::Migrator.current_version}"
|
215
110
|
puts "Current Data version: #{DataMigrate::DataMigrator.current_version}"
|
216
111
|
end
|
217
112
|
end
|
113
|
+
|
114
|
+
namespace :abort_if_pending_migrations do
|
115
|
+
desc "Raises an error if there are pending migrations or data migrations"
|
116
|
+
task with_data: :environment do
|
117
|
+
message = %{Run `rake db:migrate:with_data` to update your database then try again.}
|
118
|
+
DataMigrate::Tasks::DataMigrateTasks.abort_if_pending_migrations(DataMigrate::DatabaseTasks.pending_migrations, message)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
namespace :schema do
|
123
|
+
namespace :load do
|
124
|
+
desc "Load both schema.rb and data_schema.rb file into the database"
|
125
|
+
task with_data: :environment do
|
126
|
+
Rake::Task["db:schema:load"].invoke
|
127
|
+
|
128
|
+
DataMigrate::DatabaseTasks.load_schema_current(
|
129
|
+
:ruby,
|
130
|
+
ENV["DATA_SCHEMA"]
|
131
|
+
)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
namespace :structure do
|
137
|
+
namespace :load do
|
138
|
+
desc "Load both structure.sql and data_schema.rb file into the database"
|
139
|
+
task with_data: :environment do
|
140
|
+
Rake::Task["db:structure:load"].invoke
|
141
|
+
|
142
|
+
DataMigrate::DatabaseTasks.load_schema_current(
|
143
|
+
:ruby,
|
144
|
+
ENV["DATA_SCHEMA"]
|
145
|
+
)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
namespace :prepare do
|
151
|
+
desc "Runs setup if database does not exist, or runs data and schema migrations if it does"
|
152
|
+
task with_data: :environment do
|
153
|
+
DataMigrate::DatabaseTasks.prepare_all_with_data
|
154
|
+
end
|
155
|
+
end
|
218
156
|
end
|
219
157
|
|
220
158
|
namespace :data do
|
221
159
|
desc 'Migrate data migrations (options: VERSION=x, VERBOSE=false)'
|
222
160
|
task :migrate => :environment do
|
223
|
-
|
224
|
-
|
225
|
-
DataMigrate::DataMigrator.migrate("db/data/", ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
|
161
|
+
DataMigrate::Tasks::DataMigrateTasks.migrate
|
162
|
+
Rake::Task["data:dump"].invoke
|
226
163
|
end
|
227
164
|
|
228
165
|
namespace :migrate do
|
229
166
|
desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
|
230
167
|
task :redo => :environment do
|
231
|
-
|
168
|
+
DataMigrate::DataMigrator.create_data_schema_table
|
232
169
|
if ENV["VERSION"]
|
233
170
|
Rake::Task["data:migrate:down"].invoke
|
234
171
|
Rake::Task["data:migrate:up"].invoke
|
@@ -240,128 +177,78 @@ namespace :data do
|
|
240
177
|
|
241
178
|
desc 'Runs the "up" for a given migration VERSION.'
|
242
179
|
task :up => :environment do
|
243
|
-
|
180
|
+
DataMigrate::DataMigrator.create_data_schema_table
|
244
181
|
version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
245
182
|
raise "VERSION is required" unless version
|
246
|
-
DataMigrate::DataMigrator.run(:up,
|
183
|
+
DataMigrate::DataMigrator.run(:up, DataMigrate::DatabaseTasks.data_migrations_path, version)
|
184
|
+
Rake::Task["data:dump"].invoke
|
247
185
|
end
|
248
186
|
|
249
187
|
desc 'Runs the "down" for a given migration VERSION.'
|
250
188
|
task :down => :environment do
|
251
189
|
version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
252
190
|
raise "VERSION is required" unless version
|
253
|
-
|
254
|
-
DataMigrate::DataMigrator.run(:down,
|
191
|
+
DataMigrate::DataMigrator.create_data_schema_table
|
192
|
+
DataMigrate::DataMigrator.run(:down, DataMigrate::DatabaseTasks.data_migrations_path, version)
|
193
|
+
Rake::Task["data:dump"].invoke
|
255
194
|
end
|
256
195
|
|
257
196
|
desc "Display status of data migrations"
|
258
197
|
task :status => :environment do
|
259
|
-
|
260
|
-
ActiveRecord::Base.establish_connection(config)
|
261
|
-
unless ActiveRecord::Base.connection.table_exists?(DataMigrate::DataMigrator.schema_migrations_table_name)
|
262
|
-
puts 'Data migrations table does not exist yet.'
|
263
|
-
next # means "return" for rake task
|
264
|
-
end
|
265
|
-
db_list = ActiveRecord::Base.connection.select_values("SELECT version FROM #{DataMigrate::DataMigrator.schema_migrations_table_name}")
|
266
|
-
file_list = []
|
267
|
-
Dir.foreach(File.join(Rails.root, 'db', 'data')) do |file|
|
268
|
-
# only files matching "20091231235959_some_name.rb" pattern
|
269
|
-
if match_data = /(\d{14})_(.+)\.rb/.match(file)
|
270
|
-
status = db_list.delete(match_data[1]) ? 'up' : 'down'
|
271
|
-
file_list << [status, match_data[1], match_data[2]]
|
272
|
-
end
|
273
|
-
end
|
274
|
-
# output
|
275
|
-
puts "\ndatabase: #{config['database']}\n\n"
|
276
|
-
puts "#{"Status".center(8)} #{"Migration ID".ljust(14)} Migration Name"
|
277
|
-
puts "-" * 50
|
278
|
-
file_list.each do |file|
|
279
|
-
puts "#{file[0].center(8)} #{file[1].ljust(14)} #{file[2].humanize}"
|
280
|
-
end
|
281
|
-
db_list.each do |version|
|
282
|
-
puts "#{'up'.center(8)} #{version.ljust(14)} *** NO FILE ***"
|
283
|
-
end
|
284
|
-
puts
|
198
|
+
DataMigrate::Tasks::DataMigrateTasks.status
|
285
199
|
end
|
286
200
|
end
|
287
201
|
|
288
202
|
desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).'
|
289
203
|
task :rollback => :environment do
|
290
|
-
|
204
|
+
DataMigrate::DataMigrator.create_data_schema_table
|
291
205
|
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
292
|
-
DataMigrate::DataMigrator.rollback(
|
206
|
+
DataMigrate::DataMigrator.rollback(DataMigrate::DatabaseTasks.data_migrations_path, step)
|
207
|
+
Rake::Task["data:dump"].invoke
|
293
208
|
end
|
294
209
|
|
295
210
|
desc 'Pushes the schema to the next version (specify steps w/ STEP=n).'
|
296
211
|
task :forward => :environment do
|
297
|
-
|
212
|
+
DataMigrate::DataMigrator.create_data_schema_table
|
298
213
|
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
299
214
|
# TODO: No worky for .forward
|
300
215
|
# DataMigrate::DataMigrator.forward('db/data/', step)
|
301
|
-
migrations = pending_data_migrations.reverse.pop(step).reverse
|
216
|
+
migrations = DataMigrate::DatabaseTasks.pending_data_migrations.reverse.pop(step).reverse
|
302
217
|
migrations.each do | pending_migration |
|
303
|
-
DataMigrate::DataMigrator.run(:up,
|
218
|
+
DataMigrate::DataMigrator.run(:up, DataMigrate::DatabaseTasks.data_migrations_path, pending_migration[:version])
|
304
219
|
end
|
220
|
+
Rake::Task["data:dump"].invoke
|
305
221
|
end
|
306
222
|
|
307
223
|
desc "Retrieves the current schema version number for data migrations"
|
308
224
|
task :version => :environment do
|
309
|
-
|
225
|
+
DataMigrate::DataMigrator.create_data_schema_table
|
310
226
|
puts "Current data version: #{DataMigrate::DataMigrator.current_version}"
|
311
227
|
end
|
312
|
-
end
|
313
|
-
|
314
|
-
def pending_migrations
|
315
|
-
sort_migrations pending_data_migrations, pending_schema_migrations
|
316
|
-
end
|
317
|
-
|
318
|
-
def pending_data_migrations
|
319
|
-
data_migrations = DataMigrate::DataMigrator.migrations('db/data')
|
320
|
-
sort_migrations DataMigrate::DataMigrator.new(:up, data_migrations ).
|
321
|
-
pending_migrations.map{|m| { :version => m.version, :kind => :data }}
|
322
|
-
end
|
323
|
-
|
324
|
-
def pending_schema_migrations
|
325
|
-
all_migrations = ActiveRecord::Migrator.migrations(Rails.application.config.paths["db/migrate"])
|
326
|
-
sort_migrations(
|
327
|
-
ActiveRecord::Migrator.new(:up, all_migrations).
|
328
|
-
pending_migrations.
|
329
|
-
map{|m| { :version => m.version, :kind => :schema }})
|
330
|
-
end
|
331
|
-
|
332
|
-
def sort_migrations set_1, set_2=nil
|
333
|
-
migrations = set_1 + (set_2 || [])
|
334
|
-
migrations.sort{|a,b| sort_string(a) <=> sort_string(b)}
|
335
|
-
end
|
336
|
-
|
337
|
-
def sort_string migration
|
338
|
-
"#{migration[:version]}_#{migration[:kind] == :data ? 1 : 0}"
|
339
|
-
end
|
340
|
-
|
341
|
-
def connect_to_database
|
342
|
-
config = ActiveRecord::Base.configurations[Rails.env || 'development']
|
343
|
-
ActiveRecord::Base.establish_connection(config)
|
344
228
|
|
345
|
-
|
346
|
-
|
347
|
-
|
229
|
+
desc "Raises an error if there are pending data migrations"
|
230
|
+
task abort_if_pending_migrations: :environment do
|
231
|
+
message = %{Run `rake data:migrate` to update your database then try again.}
|
232
|
+
DataMigrate::Tasks::DataMigrateTasks.abort_if_pending_migrations(DataMigrate::DatabaseTasks.pending_data_migrations, message)
|
348
233
|
end
|
349
|
-
unless ActiveRecord::Base.connection.table_exists?(ActiveRecord::Migrator.schema_migrations_table_name)
|
350
|
-
puts 'Schema migrations table does not exist yet.'
|
351
|
-
config = nil
|
352
|
-
end
|
353
|
-
config
|
354
|
-
end
|
355
234
|
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
db_list_schema = ActiveRecord::Base.connection.select_values("SELECT version FROM #{ActiveRecord::Migrator.schema_migrations_table_name}").sort
|
360
|
-
migrations = db_list_data.map{|d| {:version => d.to_i, :kind => :data }} + db_list_schema.map{|d| {:version => d.to_i, :kind => :schema }}
|
235
|
+
desc "Create a db/data_schema.rb file that stores the current data version"
|
236
|
+
task dump: :environment do
|
237
|
+
DataMigrate::Tasks::DataMigrateTasks.dump
|
361
238
|
|
362
|
-
|
363
|
-
|
239
|
+
# Allow this task to be called as many times as required. An example
|
240
|
+
# is the migrate:redo task, which calls other two internally
|
241
|
+
# that depend on this one.
|
242
|
+
Rake::Task["data:dump"].reenable
|
243
|
+
end
|
364
244
|
|
365
|
-
|
366
|
-
|
245
|
+
namespace :schema do
|
246
|
+
desc "Load data_schema.rb file into the database"
|
247
|
+
task load: :environment do
|
248
|
+
DataMigrate::DatabaseTasks.load_schema_current(
|
249
|
+
:ruby,
|
250
|
+
ENV["DATA_SCHEMA"]
|
251
|
+
)
|
252
|
+
end
|
253
|
+
end
|
367
254
|
end
|
metadata
CHANGED
@@ -1,30 +1,45 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: data_migrate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 11.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew J Vargo
|
8
8
|
- Ilya Katz
|
9
|
-
|
9
|
+
- Deborah Enomah
|
10
|
+
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date:
|
13
|
+
date: 2025-03-19 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
+
name: activerecord
|
16
17
|
requirement: !ruby/object:Gem::Requirement
|
17
18
|
requirements:
|
18
19
|
- - ">="
|
19
20
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
21
|
+
version: '6.1'
|
21
22
|
type: :runtime
|
22
23
|
prerelease: false
|
23
24
|
version_requirements: !ruby/object:Gem::Requirement
|
24
25
|
requirements:
|
25
26
|
- - ">="
|
26
27
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
28
|
+
version: '6.1'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: railties
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '6.1'
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '6.1'
|
28
43
|
- !ruby/object:Gem::Dependency
|
29
44
|
name: appraisal
|
30
45
|
requirement: !ruby/object:Gem::Requirement
|
@@ -137,60 +152,73 @@ dependencies:
|
|
137
152
|
- - ">="
|
138
153
|
- !ruby/object:Gem::Version
|
139
154
|
version: '0'
|
155
|
+
- !ruby/object:Gem::Dependency
|
156
|
+
name: rubocop
|
157
|
+
requirement: !ruby/object:Gem::Requirement
|
158
|
+
requirements:
|
159
|
+
- - ">="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: '0'
|
162
|
+
type: :development
|
163
|
+
prerelease: false
|
164
|
+
version_requirements: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - ">="
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '0'
|
169
|
+
- !ruby/object:Gem::Dependency
|
170
|
+
name: overcommit
|
171
|
+
requirement: !ruby/object:Gem::Requirement
|
172
|
+
requirements:
|
173
|
+
- - ">="
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: '0'
|
176
|
+
type: :development
|
177
|
+
prerelease: false
|
178
|
+
version_requirements: !ruby/object:Gem::Requirement
|
179
|
+
requirements:
|
180
|
+
- - ">="
|
181
|
+
- !ruby/object:Gem::Version
|
182
|
+
version: '0'
|
140
183
|
description: Rake tasks to migrate data alongside schema changes.
|
141
184
|
email:
|
142
185
|
- ajvargo@computer.org
|
143
186
|
- ilyakatz@gmail.com
|
187
|
+
- enomaomorogieva@gmail.com
|
144
188
|
executables: []
|
145
189
|
extensions: []
|
146
190
|
extra_rdoc_files: []
|
147
191
|
files:
|
148
|
-
- ".gitignore"
|
149
|
-
- ".rspec"
|
150
|
-
- ".travis.yml"
|
151
|
-
- Appraisals
|
152
192
|
- Changelog.md
|
153
|
-
- Gemfile
|
154
|
-
- Gemfile.rails5
|
155
|
-
- Gemfile.rails5.1
|
156
193
|
- LICENSE
|
157
194
|
- README.md
|
158
|
-
- Rakefile
|
159
|
-
- data_migrate.gemspec
|
160
|
-
- gemfiles/rails_4.0.gemfile
|
161
|
-
- gemfiles/rails_4.1.gemfile
|
162
|
-
- gemfiles/rails_4.2.gemfile
|
163
|
-
- gemfiles/rails_5.0.gemfile
|
164
|
-
- gemfiles/rails_5.1.gemfile
|
165
195
|
- lib/capistrano/data_migrate.rb
|
166
196
|
- lib/capistrano/data_migrate/migrate.rb
|
167
197
|
- lib/data_migrate.rb
|
198
|
+
- lib/data_migrate/config.rb
|
168
199
|
- lib/data_migrate/data_migrator.rb
|
200
|
+
- lib/data_migrate/data_schema.rb
|
169
201
|
- lib/data_migrate/data_schema_migration.rb
|
170
|
-
- lib/data_migrate/
|
171
|
-
- lib/data_migrate/
|
202
|
+
- lib/data_migrate/database_configurations_wrapper.rb
|
203
|
+
- lib/data_migrate/database_tasks.rb
|
204
|
+
- lib/data_migrate/migration_context.rb
|
205
|
+
- lib/data_migrate/rails_helper.rb
|
172
206
|
- lib/data_migrate/railtie.rb
|
207
|
+
- lib/data_migrate/schema_dumper.rb
|
208
|
+
- lib/data_migrate/schema_migration.rb
|
209
|
+
- lib/data_migrate/status_service.rb
|
210
|
+
- lib/data_migrate/tasks/data_migrate_tasks.rb
|
173
211
|
- lib/data_migrate/version.rb
|
174
212
|
- lib/generators/data_migrate.rb
|
175
213
|
- lib/generators/data_migration/data_migration_generator.rb
|
176
214
|
- lib/generators/data_migration/templates/data_migration.rb
|
177
215
|
- lib/generators/data_migration/templates/migration.rb
|
178
|
-
- screenshot.png
|
179
|
-
- spec/data_migrate/data_migrator_spec.rb
|
180
|
-
- spec/data_migrate/data_schema_migration_spec.rb
|
181
|
-
- spec/data_migrate/migration.rb
|
182
|
-
- spec/generators/data_migration/data_migration_generator_spec.rb
|
183
|
-
- spec/spec_helper.rb
|
184
|
-
- tasks/.gitkeep
|
185
216
|
- tasks/databases.rake
|
186
217
|
homepage: https://github.com/ilyakatz/data-migrate
|
187
218
|
licenses:
|
188
219
|
- MIT
|
189
220
|
metadata: {}
|
190
|
-
post_install_message:
|
191
|
-
********************************************************************************
|
192
|
-
data-migrate: --skip-schema-migration option is no longer available as of version 3.0.0
|
193
|
-
********************************************************************************
|
221
|
+
post_install_message:
|
194
222
|
rdoc_options: []
|
195
223
|
require_paths:
|
196
224
|
- lib
|
@@ -205,14 +233,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
205
233
|
- !ruby/object:Gem::Version
|
206
234
|
version: '0'
|
207
235
|
requirements: []
|
208
|
-
|
209
|
-
|
210
|
-
signing_key:
|
236
|
+
rubygems_version: 3.4.19
|
237
|
+
signing_key:
|
211
238
|
specification_version: 4
|
212
239
|
summary: Rake tasks to migrate data alongside schema changes.
|
213
|
-
test_files:
|
214
|
-
- spec/data_migrate/data_migrator_spec.rb
|
215
|
-
- spec/data_migrate/data_schema_migration_spec.rb
|
216
|
-
- spec/data_migrate/migration.rb
|
217
|
-
- spec/generators/data_migration/data_migration_generator_spec.rb
|
218
|
-
- spec/spec_helper.rb
|
240
|
+
test_files: []
|
data/.gitignore
DELETED
data/.rspec
DELETED
data/.travis.yml
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm:
|
3
|
-
- 2.2.6
|
4
|
-
- 2.3.4
|
5
|
-
script: bundle exec rspec
|
6
|
-
gemfile:
|
7
|
-
- gemfiles/rails_4.0.gemfile
|
8
|
-
- gemfiles/rails_4.1.gemfile
|
9
|
-
- gemfiles/rails_4.2.gemfile
|
10
|
-
- gemfiles/rails_5.0.gemfile
|
11
|
-
- gemfiles/rails_5.1.gemfile
|
12
|
-
matrix:
|
13
|
-
exclude:
|
14
|
-
- rvm: 2.0.0-p648
|
15
|
-
gemfile: gemfiles/rails_5.0.gemfile
|
16
|
-
- rvm: 2.1.10
|
17
|
-
gemfile: gemfiles/rails_5.0.gemfile
|