<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: Tobi's Code Snippets</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 24 Jul 2008 12:08:02 GMT</pubDate>
    <description>DZone Snippets: Tobi's Code Snippets</description>
    <item>
      <title>Get your production DB on your dev box</title>
      <link>http://snippets.dzone.com/posts/show/313</link>
      <description>&lt;code&gt;&lt;br /&gt;# ssh www.server.com mysqldump -u root db_name --add-drop-table | mysql -u root db_name_dev&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 22 May 2005 22:28:01 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/313</guid>
      <author>tobi (Tobias Luetke)</author>
    </item>
    <item>
      <title>EveryDNS update script</title>
      <link>http://snippets.dzone.com/posts/show/43</link>
      <description>This script lets you update your IP address at everydns.net&lt;br /&gt;&lt;br /&gt;&lt;code&gt;#!/usr/bin/env ruby&lt;br /&gt;require 'optparse' &lt;br /&gt;require 'net/http' &lt;br /&gt;require 'cgi' &lt;br /&gt;&lt;br /&gt;class EveryDnsUpdater&lt;br /&gt;  attr_accessor :user, :pass&lt;br /&gt;  attr_reader :ip, :code, :body&lt;br /&gt;&lt;br /&gt;  def params&lt;br /&gt;    @params ||= {"ver" =&gt; "0.1"}&lt;br /&gt;  end&lt;br /&gt;      &lt;br /&gt;  def host&lt;br /&gt;    "dyn.everydns.net"&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def query&lt;br /&gt;    "/index.php?" + params.collect{ |k,v| "#{k}=#{CGI.escape(v)}"}.join('&amp;')&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def parse(body)&lt;br /&gt;    @body   = body&lt;br /&gt;    @code   = @body.scan(/Exit Code: (\d+)/i).to_s.to_i&lt;br /&gt;    @ip     = @body.scan(/IP now: ([\d\.]+)/).to_s&lt;br /&gt;  end&lt;br /&gt;      &lt;br /&gt;  def run&lt;br /&gt;    Net::HTTP.start(host) do |http| &lt;br /&gt;&lt;br /&gt;      req = Net::HTTP::Get.new(query) &lt;br /&gt;      req.basic_auth(user, pass)&lt;br /&gt;      response = http.request(req)&lt;br /&gt;      case response&lt;br /&gt;      when Net::HTTPSuccess&lt;br /&gt;        parse(response.body)&lt;br /&gt;        return @code&lt;br /&gt;      else&lt;br /&gt;        return response.code&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;opts = OptionParser.new &lt;br /&gt;updater = EveryDnsUpdater.new&lt;br /&gt;&lt;br /&gt;opts.banner = "Usage: everydns [options]"&lt;br /&gt;opts.separator ""&lt;br /&gt;opts.on("-u", "--user=USER", "User name") { |str| updater.user = str } &lt;br /&gt;opts.on("-p", "--pass=PASS", "Password") { |str| updater.pass = str } &lt;br /&gt;opts.on("-d", "--domain=DOMAIN", "Domain name you wish to update")  { |str| updater.params["domain"] = str } &lt;br /&gt;opts.on("-a", "--address=[IP]", "IP address you want to supply") { |str| updater.params["ip"] = str } &lt;br /&gt;opts.on_tail("-h", "--help")   { puts opts; exit } &lt;br /&gt;&lt;br /&gt;opts.parse(ARGV)&lt;br /&gt;&lt;br /&gt;if ARGV.empty? or updater.user.nil? or updater.pass.nil? or updater.params["domain"].nil?&lt;br /&gt;  puts opts&lt;br /&gt;  exit&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;if updater.run == 0&lt;br /&gt;  puts "IP address set to #{updater.ip} successfully..."&lt;br /&gt;else&lt;br /&gt;  puts "Not successful..."&lt;br /&gt;  puts updater.body&lt;br /&gt;end&lt;/code&gt;</description>
      <pubDate>Thu, 07 Apr 2005 09:43:11 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/43</guid>
      <author>tobi (Tobias Luetke)</author>
    </item>
    <item>
      <title>Deploy script for rails applications under version control</title>
      <link>http://snippets.dzone.com/posts/show/42</link>
      <description>&lt;code&gt;#!/usr/bin/env ruby&lt;br /&gt;&lt;br /&gt;require 'yaml'&lt;br /&gt;require 'rubygems'&lt;br /&gt;require_gem 'net-ssh'&lt;br /&gt;&lt;br /&gt;$stdout.sync = true&lt;br /&gt;&lt;br /&gt;def help&lt;br /&gt;  puts &lt;&lt;-USAGE&lt;br /&gt;This tool allows you to conviniently deploy your projects on production&lt;br /&gt;or staging servers.&lt;br /&gt;&lt;br /&gt;  Useage:&lt;br /&gt;    deploy &lt;target&gt;&lt;br /&gt;    Please specify configuration in ~/.deployrc&lt;br /&gt;    &lt;br /&gt;  Example:  &lt;br /&gt;    &lt;br /&gt;    example ~/.deployrc:   &lt;br /&gt;    &lt;br /&gt;      hieraki:&lt;br /&gt;        server: linux&lt;br /&gt;        get: svn export svn://myserver/hieraki/trunk&lt;br /&gt;        directory: /var/www/applications/hieraki&lt;br /&gt;        test: RAILS_ENV=production rake&lt;br /&gt;&lt;br /&gt;        after_test:&lt;br /&gt;          - chmod 777 log/&lt;br /&gt;          - chmod 666 log/*&lt;br /&gt;&lt;br /&gt;        after_commit:&lt;br /&gt;          - sudo /etc/init.d/apache reload    &lt;br /&gt;&lt;br /&gt;  Note: &lt;br /&gt;  &lt;br /&gt;    server, get and directory are required&lt;br /&gt;    &lt;br /&gt;    available hooks are&lt;br /&gt;      - after_connect&lt;br /&gt;      - after_deploy&lt;br /&gt;      - after_test&lt;br /&gt;      - after_commit&lt;br /&gt;        &lt;br /&gt;  USAGE&lt;br /&gt;  exit&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def do_exec(cmd)&lt;br /&gt;  print "\n\n  #{cmd}\n    "&lt;br /&gt;  &lt;br /&gt;  stderr = ""&lt;br /&gt;  $session.process.open( cmd ) do |cmd|&lt;br /&gt;    cmd.on_exit do |p, status|&lt;br /&gt;      if status == 0&lt;br /&gt;        print "[done]\n" &lt;br /&gt;      else&lt;br /&gt;        puts "    #{stderr}"        &lt;br /&gt;        print "[failed]\n" &lt;br /&gt;        exit&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;    &lt;br /&gt;    cmd.on_stderr do |p, data|&lt;br /&gt;      stderr &lt;&lt; data.gsub(/\n/, "\n    ")&lt;br /&gt;    end    &lt;br /&gt;    cmd.on_stdout do |p, data|&lt;br /&gt;      STDOUT &lt;&lt; data.gsub(/\n/, "\n    ")&lt;br /&gt;    end                &lt;br /&gt;  end  &lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# Batch jobs&lt;br /&gt;&lt;br /&gt;def deploy&lt;br /&gt;  puts      "\ndeploying"  &lt;br /&gt;&lt;br /&gt;  print     "  creating dirs"&lt;br /&gt;  do_exec   "mkdir -p #{$config['directory']}" &lt;br /&gt;&lt;br /&gt;  print     "  get"&lt;br /&gt;  do_exec   "#{$config['get']} #{$config['deploy']}"&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def test&lt;br /&gt;  puts      "\ntesting"  &lt;br /&gt;  do_exec   "cd #{$config['deploy']}; #{$config['test']}"&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def commit&lt;br /&gt;  puts      "\ncomitting"&lt;br /&gt;  print     "  creating new link"&lt;br /&gt;  do_exec   "ln -nfs #{$config['deploy']}/ #{$config['target']}"&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def run_tasks(tasks)&lt;br /&gt;  $config[tasks].to_a.each do |task|    &lt;br /&gt;    do_exec "cd #{$config['deploy']}; #{task}" &lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;app_name = ARGV[0] || help&lt;br /&gt;$config = YAML::load(File.open(File.expand_path("~/.deployrc")))[app_name]&lt;br /&gt;&lt;br /&gt;# compute deploy directory &lt;br /&gt;$config['deploy'] = $config['directory'] + "/#{Time.now.strftime("%Y%m%d-%H%M")}"&lt;br /&gt;# compute target directory &lt;br /&gt;$config['target'] = $config['directory'] + "/latest"&lt;br /&gt;&lt;br /&gt;puts "deploying #{app_name} to #{$config["server"]}"&lt;br /&gt;&lt;br /&gt;$session = Net::SSH.start( $config["server"] )&lt;br /&gt;&lt;br /&gt;run_tasks("after_connect")  &lt;br /&gt;deploy&lt;br /&gt;run_tasks("after_deploy")&lt;br /&gt;test&lt;br /&gt;run_tasks("after_test")&lt;br /&gt;commit&lt;br /&gt;run_tasks("after_commit")&lt;br /&gt;puts ""&lt;br /&gt;puts "success!"&lt;/code&gt;</description>
      <pubDate>Thu, 07 Apr 2005 09:42:10 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/42</guid>
      <author>tobi (Tobias Luetke)</author>
    </item>
  </channel>
</rss>
