lib/pave/database.rb in pave-0.5.0 vs lib/pave/database.rb in pave-0.6.0
- old
+ new
@@ -17,28 +17,85 @@
def setup
sh "mysql -uroot -e 'CREATE DATABASE #{name}'"
end
+ def remote_db
+ require 'json'
+ live_domain = shell("php -r \"error_reporting(0);require('./config/site.php');echo LIVE_DOMAIN;\"").output
+ db_json = shell("php -r \"error_reporting(0);"\
+ "\\$_SERVER = array('HTTP_HOST' => '#{live_domain}');"\
+ "require('./config/site.php');"\
+ "echo json_encode("\
+ "array('host' => DB_SERVER,"\
+ "'user' => DB_USERNAME,"\
+ "'pass' => DB_PASSWORD,"\
+ "'name' => DB_DATABASE));\"").output
+ JSON.parse(db_json)
+ end
+
+ def remote_url(remote="live")
+ "#{Pave::Remote.server(remote)}:#{Pave::Remote.directory(remote)}"
+ end
+
+ def dump_file
+ "#{Time.now.strftime("%Y-%m-%d")}-#{name}.sql.gz"
+ end
+
def dump
if !File.directory?('db')
sh "mkdir ./db"
sh "echo '<?= die(); ?>' > ./db/index.php"
sh "echo 'deny from all' > ./db/.htaccess"
sh "sudo chmod -R 700 ./db/"
end
- dbname = Time.now.strftime("%Y-%m-%d-%H%M") + "-" + name + ".sql.gz"
- say "Creating dump of #{name} at #{Dir.pwd}/db/#{dbname}"
- sh "mysqldump -uroot #{name} | gzip > ./db/#{dbname}"
- say "Dump complete."
+ say "Creating dump of #{name} at #{Dir.pwd}/db/#{dump_file}"
+ sh "mysqldump -uroot #{name} | gzip > ./db/#{dump_file}"
end
- def download(host, user, password)
- # Download the project's live database and replace local database.
- # sh "mysqldump -h#{host} -u#{user} -p#{password} #{name} | mysql -uroot #{name}"
+ def dump_remote(remote="live")
+ server = Pave::Remote.server(remote)
+ directory = Pave::Remote.directory(remote)
+ db = remote_db
+ say "Remotely creating dump of #{db['name']} at #{server}:#{directory}/db/#{dump_file}"
+ sh "ssh #{server} \"cd #{directory}/db; mysqldump -u#{db['user']} -p#{db['pass']} #{db['name']} | gzip > #{dump_file}\""
end
- def upload
+ def execute
+ say "Executing #{dump_file} on #{name}"
+ sh "gzip -dc ./db/#{dump_file} | mysql -uroot #{name}"
+ end
+
+ def execute_remote(remote="live")
+ server = Pave::Remote.server(remote)
+ directory = Pave::Remote.directory(remote)
+ say "Remotely executing #{dump_file} on live #{db['name']}"
+ sh "ssh #{server} \"cd #{directory}/db; gzip -dc #{dump_file} | mysql -u#{db['user']} -p#{db['pass']} #{db['name']}\""
+ end
+
+ def upload(remote="live")
+ # Upload the project's local database dump to remotes db directory.
+ say "Uploading SQL dump to #{remote_url}/db/#{dump_file}"
+ sh "scp ./db/#{dump_file} #{remote_url}/db"
+ end
+
+ def download(remote="live")
+ # Download the project's live database dump to local db directory.
+ say "Downloading SQL dump from #{remote_url}/db/#{dump_file}"
+ sh "scp #{remote_url}/db/#{dump_file} ./db"
+ end
+
+ def push(remote="live")
# Upload the project's local database and replace the live database.
+ dump
+ upload(remote)
+ execute_remote(remote)
+ end
+
+ def pull(remote="live")
+ # Download the project's live database and replace local database.
+ dump_remote(remote)
+ download(remote)
+ execute
end
end
end