1) Zuerst folgendes rake-Skript in den lib/tasks/ Ordner der Rails-Anwendungen ablegen, unter dem Namen "backup.task":
namespace :db do
namespace :backup do
def interesting_tables
ActiveRecord::Base.connection.tables.sort.reject! do |tbl|
['schema_info', 'sessions', 'public_exceptions'].include?(tbl)
end
end
desc "Dump entire db."
task :write => :environment do
dir = RAILS_ROOT + '/db/backup'
FileUtils.mkdir_p(dir)
FileUtils.chdir(dir)
interesting_tables.each do |tbl|
klass = tbl.classify.constantize
puts "Writing #{tbl}..."
File.open("#{tbl}.yml", 'w+') { |f| YAML.dump klass.find(:all).collect(&:attributes), f }
end
end
task :read => [:environment, 'db:schema:load'] do
dir = RAILS_ROOT + '/db/backup'
FileUtils.mkdir_p(dir)
FileUtils.chdir(dir)
interesting_tables.each do |tbl|
klass = tbl.classify.constantize
ActiveRecord::Base.transaction do
puts "Loading #{tbl}..."
YAML.load_file("#{tbl}.yml").each do |fixture|
ActiveRecord::Base.connection.execute "INSERT INTO #{tbl} (#{fixture.keys.join(",")}) VALUES (#{fixture.values.collect { |value| ActiveRecord::Base.connection.quote(value) }.join(",")})", 'Fixture Insert'
end
end
end
end
end
end
2) Dann in der "alten" Rails-Anwendung das rake-Backup starten:
rake db:backup:write
Dieses Skript legt euch für jede Tabelle eine .yml-Datei in den Ordner db/backup/. Diese .yml-Dateien müsst ihr nun in einen Ordner db/backup/ der neuen Rails-Anwendung kopieren. Wenn ihr die gleich Rails-Anwendung haben wollt und nur den Datenbankserver ändern wollt, dann editiert an dieser Stelle einfach die database.yml, damit sie jetzt auf den neuen Server verweist.
3) In der "neuen" Rails-Anwendung dann die Tabellen wiederherstellen:
rake db:backup:read
Das Skript liest die .yml aus dem Ordner db/backup/ und fügt die Daten in die entsprechenden Tabellen der neuen Rails-Anwendung ein.
0 Kommentare:
Kommentar veröffentlichen