Never been to DZone Snippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

About this user

Tobias Luetke http://blog.leetsoft.com

« Newer Snippets
Older Snippets »
Showing 1-3 of 3 total  RSS 

Get your production DB on your dev box

# ssh www.server.com mysqldump -u root db_name --add-drop-table | mysql -u root db_name_dev

EveryDNS update script

This script lets you update your IP address at everydns.net

#!/usr/bin/env ruby
require 'optparse' 
require 'net/http' 
require 'cgi' 

class EveryDnsUpdater
  attr_accessor :user, :pass
  attr_reader :ip, :code, :body

  def params
    @params ||= {"ver" => "0.1"}
  end
      
  def host
    "dyn.everydns.net"
  end
  
  def query
    "/index.php?" + params.collect{ |k,v| "#{k}=#{CGI.escape(v)}"}.join('&')
  end
  
  def parse(body)
    @body   = body
    @code   = @body.scan(/Exit Code: (\d+)/i).to_s.to_i
    @ip     = @body.scan(/IP now: ([\d\.]+)/).to_s
  end
      
  def run
    Net::HTTP.start(host) do |http| 

      req = Net::HTTP::Get.new(query) 
      req.basic_auth(user, pass)
      response = http.request(req)
      case response
      when Net::HTTPSuccess
        parse(response.body)
        return @code
      else
        return response.code
      end
    end
  end
end

opts = OptionParser.new 
updater = EveryDnsUpdater.new

opts.banner = "Usage: everydns [options]"
opts.separator ""
opts.on("-u", "--user=USER", "User name") { |str| updater.user = str } 
opts.on("-p", "--pass=PASS", "Password") { |str| updater.pass = str } 
opts.on("-d", "--domain=DOMAIN", "Domain name you wish to update")  { |str| updater.params["domain"] = str } 
opts.on("-a", "--address=[IP]", "IP address you want to supply") { |str| updater.params["ip"] = str } 
opts.on_tail("-h", "--help")   { puts opts; exit } 

opts.parse(ARGV)

if ARGV.empty? or updater.user.nil? or updater.pass.nil? or updater.params["domain"].nil?
  puts opts
  exit
end

if updater.run == 0
  puts "IP address set to #{updater.ip} successfully..."
else
  puts "Not successful..."
  puts updater.body
end

Deploy script for rails applications under version control

#!/usr/bin/env ruby

require 'yaml'
require 'rubygems'
require_gem 'net-ssh'

$stdout.sync = true

def help
  puts <<-USAGE
This tool allows you to conviniently deploy your projects on production
or staging servers.

  Useage:
    deploy <target>
    Please specify configuration in ~/.deployrc
    
  Example:  
    
    example ~/.deployrc:   
    
      hieraki:
        server: linux
        get: svn export svn://myserver/hieraki/trunk
        directory: /var/www/applications/hieraki
        test: RAILS_ENV=production rake

        after_test:
          - chmod 777 log/
          - chmod 666 log/*

        after_commit:
          - sudo /etc/init.d/apache reload    

  Note: 
  
    server, get and directory are required
    
    available hooks are
      - after_connect
      - after_deploy
      - after_test
      - after_commit
        
  USAGE
  exit
end

def do_exec(cmd)
  print "\n\n  #{cmd}\n    "
  
  stderr = ""
  $session.process.open( cmd ) do |cmd|
    cmd.on_exit do |p, status|
      if status == 0
        print "[done]\n" 
      else
        puts "    #{stderr}"        
        print "[failed]\n" 
        exit
      end
    end
    
    cmd.on_stderr do |p, data|
      stderr << data.gsub(/\n/, "\n    ")
    end    
    cmd.on_stdout do |p, data|
      STDOUT << data.gsub(/\n/, "\n    ")
    end                
  end  
end

# Batch jobs

def deploy
  puts      "\ndeploying"  

  print     "  creating dirs"
  do_exec   "mkdir -p #{$config['directory']}" 

  print     "  get"
  do_exec   "#{$config['get']} #{$config['deploy']}"
end

def test
  puts      "\ntesting"  
  do_exec   "cd #{$config['deploy']}; #{$config['test']}"
end

def commit
  puts      "\ncomitting"
  print     "  creating new link"
  do_exec   "ln -nfs #{$config['deploy']}/ #{$config['target']}"
end

def run_tasks(tasks)
  $config[tasks].to_a.each do |task|    
    do_exec "cd #{$config['deploy']}; #{task}" 
  end
end


app_name = ARGV[0] || help
$config = YAML::load(File.open(File.expand_path("~/.deployrc")))[app_name]

# compute deploy directory 
$config['deploy'] = $config['directory'] + "/#{Time.now.strftime("%Y%m%d-%H%M")}"
# compute target directory 
$config['target'] = $config['directory'] + "/latest"

puts "deploying #{app_name} to #{$config["server"]}"

$session = Net::SSH.start( $config["server"] )

run_tasks("after_connect")  
deploy
run_tasks("after_deploy")
test
run_tasks("after_test")
commit
run_tasks("after_commit")
puts ""
puts "success!"
« Newer Snippets
Older Snippets »
Showing 1-3 of 3 total  RSS