namespace :backy do
@config = Rails.configuration.database_configuration
@host = @config[Rails.env]["host"] @database = @config[Rails.env]["database"] @username = @config[Rails.env]["username"] @password = @config[Rails.env]["password"] desc 'dumps database into db/backy.sql file' task :dump => :environment do case ActiveRecord::Base.connection.adapter_name when "PostgreSQL" postgresql_dump when "Mysql2" mysql2_dump else abort("only PostgreSQL, Mysql2 compatible") end end desc 'recovers database from db/backy.sql file' task :load => :environment do case ActiveRecord::Base.connection.adapter_name when "PostgreSQL" postgresql_load when "Mysql2" mysql2_load else abort("only PostgreSQL, Mysql2 compatible") end end
def postgresql_load
puts "adapter: #{ActiveRecord::Base.connection.adapter_name}" puts "invoking db:drop ..." Rake::Task["db:drop"].invoke puts "invoking db:create ..." Rake::Task["db:create"].invoke puts "loading db/backy.sql ..." system( "export PGPASSWORD=#{@password}" ) system( "rails db < db/backy.sql" ) system( "unset PGPASSWORD" )
end
def postgresql_dump
puts "adapter: #{ActiveRecord::Base.connection.adapter_name}" puts "invoking pg_dump ..." system( "export PGPASSWORD=#{@password}" ) system( "pg_dump -U'#{@username}' --no-password --file='db/backy.sql' #{@database}" ) system( "unset PGPASSWORD" )
end
def mysql2_load
puts "adapter: #{ActiveRecord::Base.connection.adapter_name}" puts "loading db/backy.sql ..." system( "mysql -u'#{@username}' -p'#{@password}' '#{@database}' < db/backy.sql" )
end
def mysql2_dump
puts "adapter: #{ActiveRecord::Base.connection.adapter_name}" puts "invoking mysqldump ..." system( "mysqldump -u'#{@username}' -p'#{@password}' '#{@database}' > db/backy.sql" )
end
end