class Pave::Database
Attributes
name[RW]
Public Class Methods
create(name)
click to toggle source
# File lib/pave/database.rb, line 7 def self.create(name) say "" return say "Options should be given after the database name. For details run: `pave help`" unless name && name.size > 0 say "Creating mysql database: #{name}." new(name).setup end
new(name)
click to toggle source
# File lib/pave/database.rb, line 14 def initialize(name) @name = name end
Public Instance Methods
download_remote_to_local(remote="live")
click to toggle source
# File lib/pave/database.rb, line 88 def download_remote_to_local(remote="live") # Download the project's live database dump to local db directory. say "Downloading SQL dump from #{remote_url}/db/#{dump_file(:remote)} to ./db/#{dump_file(:remote)}" sh "scp #{remote_url}/db/#{dump_file(:remote)} ./db/#{dump_file(:remote)}" end
drop()
click to toggle source
# File lib/pave/database.rb, line 22 def drop destroy = agree("Are you sure you want to drop #{name}? All data will be lost.") sh "mysql -uroot -e 'DROP DATABASE #{name}'" if destroy end
dump_file(which_db)
click to toggle source
# File lib/pave/database.rb, line 45 def dump_file(which_db) @dump_file_name ||= {} @dump_file_name[which_db] ||= "#{Time.now.strftime("%Y-%m-%d_%H-%M-%S")}-#{name}-#{which_db}.sql.gz" end
dump_local()
click to toggle source
# File lib/pave/database.rb, line 50 def dump_local 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 say "Creating dump of #{name} at #{Dir.pwd}/db/#{dump_file(:local)}" sh "mysqldump -uroot #{name} | gzip > ./db/#{dump_file(:local)}" end
dump_remote(remote="live")
click to toggle source
# File lib/pave/database.rb, line 61 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(:remote)}" sh "ssh #{server} \"cd #{directory}/db; mysqldump -u#{db['user']} -p#{db['pass']} #{db['name']} | gzip > #{dump_file(:remote)}\"" end
execute_local_dump_on_remote_db(remote="live")
click to toggle source
# File lib/pave/database.rb, line 74 def execute_local_dump_on_remote_db(remote="live") server = Pave::Remote.server(remote) directory = Pave::Remote.directory(remote) db = remote_db say "Remotely executing #{dump_file(:local)} on live #{db['name']}" sh "ssh #{server} \"cd #{directory}/db; gzip -dc #{dump_file(:local)} | mysql -u#{db['user']} -p#{db['pass']} #{db['name']}\"" end
execute_remote_dump_on_local_db()
click to toggle source
# File lib/pave/database.rb, line 69 def execute_remote_dump_on_local_db say "Executing #{dump_file(:remote)} on #{name}" sh "gzip -dc ./db/#{dump_file(:remote)} | mysql -uroot #{name}" end
pull(remote="live")
click to toggle source
# File lib/pave/database.rb, line 103 def pull(remote="live") # Download the project's live database and replace local database. dump_local # for backup purposes dump_remote(remote) download_remote_to_local(remote) execute_remote_dump_on_local_db end
push(remote="live")
click to toggle source
# File lib/pave/database.rb, line 94 def push(remote="live") # Upload the project's local database and replace the live database. dump_remote(remote) # for backup purposes download_remote_to_local(remote) dump_local upload_local_dump_to_remote(remote) execute_local_dump_on_remote_db(remote) end
remote_db()
click to toggle source
# File lib/pave/database.rb, line 27 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
remote_url(remote="live")
click to toggle source
# File lib/pave/database.rb, line 41 def remote_url(remote="live") "#{Pave::Remote.server(remote)}:#{Pave::Remote.directory(remote)}" end
setup()
click to toggle source
# File lib/pave/database.rb, line 18 def setup sh "mysql -uroot -e 'CREATE DATABASE #{name}'" end
upload_local_dump_to_remote(remote="live")
click to toggle source
# File lib/pave/database.rb, line 82 def upload_local_dump_to_remote(remote="live") # Upload the project's local database dump to remotes db directory. say "Uploading ./db/#{dump_file(:local)} SQL dump to #{remote_url}/db/#{dump_file(:local)}" sh "scp ./db/#{dump_file(:local)} #{remote_url}/db/#{dump_file(:local)}" end