在#{RAILS_ROOT}/lib/tasks下建立db.rake,把mccxj给的代码拷贝进去,然后按Alt+Shift+R调出运行Rake任务的对话框,点“刷新任务”按钮,列表中会出来“db:backup:create”/“db:backup:destroy”/“db:backup:rebuild”三个任务,单击相应的任务就可以备份和恢复数据库。
下面示例说明如何在RAILS应用网页中备份和恢复MySQL数据库。
(1)建立控制器
Ruby代码
(2)编写Dbctl控制器代码
Ruby代码
class DbctlController :index
end
def restore
%x{rake db:backup:rebuild}
redirect_to :action => :index
end
end
(3)编写views/Dbctl/index.html.erb页面代码
Ruby代码
<h1>Dbc#index</h1>
<p></p>
'backup'} %>
'restore'} %>
运行你的应用程序就可以了。
说明几点:
Rails中可以用%x{SYSTEM COMMAND}命令运行系统命令,借助刚才建立的db.rake,可以使用rake db:backup:create创建数据库备份,使用rake db:backup:rebuild恢复数据库。
如果你没有建立db.rake,那么控制器代码就这么写
Ruby代码
class DbcController #{backup_file}"
redirect_to :action => :index
end
def restore
backup_folder = File.join(ENV["DIR"] || "db", 'backup')
FileUtils.mkdir_p(backup_folder)
db_config = ActiveRecord::Base.configurations[RAILS_ENV]
db_config = ActiveRecord::Base.configurations[RAILS_ENV]
bakfile = ENV['FILE']
(Dir.new(backup_folder).entries - ['.', '..']).sort.reverse.each do |backup|
(bakfile = backup and break) if backup.starts_with?(RAILS_ENV)
end unless bakfile
raise 'could not find the backup file!' unless bakfile
ActiveRecord::Base.establish_connection(RAILS_ENV)
ActiveRecord::Base.connection.execute('SET foreign_key_checks = 0')
puts "rebuild database #{db_config['database']} from #{bakfile}"
system "mysql -u #{db_config['username']} #{'-p' if db_config['password']}#{db_config['password']} #{db_config['database']} :index
end
end
下面示例说明如何在RAILS应用网页中备份和恢复MySQL数据库。
(1)建立控制器
Ruby代码
generate controller dbctl index backup restore
(2)编写Dbctl控制器代码
Ruby代码
class DbctlController :index
end
def restore
%x{rake db:backup:rebuild}
redirect_to :action => :index
end
end
(3)编写views/Dbctl/index.html.erb页面代码
Ruby代码
<h1>Dbc#index</h1>
<p></p>
'backup'} %>
'restore'} %>
运行你的应用程序就可以了。
说明几点:
Rails中可以用%x{SYSTEM COMMAND}命令运行系统命令,借助刚才建立的db.rake,可以使用rake db:backup:create创建数据库备份,使用rake db:backup:rebuild恢复数据库。
如果你没有建立db.rake,那么控制器代码就这么写
Ruby代码
class DbcController #{backup_file}"
redirect_to :action => :index
end
def restore
backup_folder = File.join(ENV["DIR"] || "db", 'backup')
FileUtils.mkdir_p(backup_folder)
db_config = ActiveRecord::Base.configurations[RAILS_ENV]
db_config = ActiveRecord::Base.configurations[RAILS_ENV]
bakfile = ENV['FILE']
(Dir.new(backup_folder).entries - ['.', '..']).sort.reverse.each do |backup|
(bakfile = backup and break) if backup.starts_with?(RAILS_ENV)
end unless bakfile
raise 'could not find the backup file!' unless bakfile
ActiveRecord::Base.establish_connection(RAILS_ENV)
ActiveRecord::Base.connection.execute('SET foreign_key_checks = 0')
puts "rebuild database #{db_config['database']} from #{bakfile}"
system "mysql -u #{db_config['username']} #{'-p' if db_config['password']}#{db_config['password']} #{db_config['database']} :index
end
end