1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
namespace :elvino do
  namespace :db do

    desc "Clone the production database to the local database."
    task :download, :roles => :db do
      require 'yaml'
      dbcfg = YAML::load_file('config/database.yml')
      pipe = IO.popen("gzcat | mysql5 -uroot #{dbcfg['development']['database']}", 'w')
      run "mysqldump -u#{dbcfg['production']['username']} -p --skip-lock-tables #{dbcfg['production']['database']} | gzip" do |channel, stream, data|
        if data =~ /^Enter password:/
          channel.send_data "#{dbcfg['production']['password']}\n" 
          next
        end
        pipe.write data
        break if stream == :err
      end
      pipe.close
    end

  end
end