Rails engine with utilities for backup and restore of entire application database. Includes rake tasks that may be invoked by cron task to periodically backup the database and send it by email.
Include this in your application Gemfile:
gem ‘get_back’, :git => ‘git://github.com/lazylester/get_back.git’
Mount the get_back routes in your config.routes.rb with:
mount GetBack::Engine => ‘/get_back’, :as => ‘get_back’, and the following routes are added
backup_restore POST /backups/:backup_id/restore(.:format) get_back/backups#restore backups GET /backups(.:format) get_back/backups#index POST /backups(.:format) get_back/backups#create new_backup GET /backups/new(.:format) get_back/backups#new edit_backup GET /backups/:id/edit(.:format) get_back/backups#edit backup GET /backups/:id(.:format) get_back/backups#show PUT /backups/:id(.:format) get_back/backups#update DELETE /backups/:id(.:format) get_back/backups#destroy
An admin page is provided at the url: ‘/get_back/backups’
The location of the backup files is defined by the global constant BACKUP_DIR. This must be defined in the main application. Alternatively, a backup file can be created in an arbitrary directory by passing a :dir parameter:
db_backup = DbBackup.new(:dir => tmp)
This is added to support a remote sync capability from the production server back to development machine.
Here is a Capistrano recipe that you can run on your dev machine to synchronize the dev database with the production server. It takes advantage of the server configuration parameters in your deploy.rb file.
namespace :db do desc "creates a copy of the remote db and load it into the local development db" task :sync do run "cd #{current_path} && RAILS_ENV=production rake db:snapshot " run_locally "rsync --remove-source-files --rsh=ssh #{user}@#{domain}:'#{current_path}/tmp/backups*' db/backups" run_locally "rake db:restore" end end
Suggest keeping backup files in a location that will survive code updates, for example in a typical Capistrano configuration there might be a ‘shared’ directory. Include in the main application an initializer in config/initializers with the following:
BACKUP_DIR = Rails.env.production? ? Rails.root.join(“../../shared/backups”) : “#{Rails.root}/db/backups/”
If it is intended to use the rake tasks for periodically emailing the backup file (e.g. driven by cron), the following global constants must be defined in your application:
BACKUP_RECIPIENTS (text string in the format "firstname lastname<[email protected]>") ORGANIZATION_NAME (text string, name of the application owner organization) ADMIN_EMAIL (text string, for example: "[email protected]") SITE_URL (text string, for example "domain.com")