lib/mina-ext/deploy.rb in mina-ext-0.0.1 vs lib/mina-ext/deploy.rb in mina-ext-0.1.0

- old
+ new

@@ -1,124 +1,249 @@ \ No newline at end of file +def origin_branches + `git branch -a`. + split("\n"). + reject{|line| line =~ /HEAD/}. + reject{|line| line =~ /master/}. + select{|line| line =~ /remotes\/origin\//}. + map{|line| line.sub(/.*remotes\/origin\//, '')} +end + +def instance_deploy_tasks(prefix, instance, &block) + namespace instance do + namespace :deploy do + origin_branches.each do |branch| + desc "Deploy '#{prefix}_#{instance}' from branch '#{branch}'" + task branch do + set :revision, branch + set :deploy_to, "/opt/www/#{prefix}_#{instance}" + set :instance, instance + set :prefix, prefix + deploy do + block.call(prefix, instance) + end + invoke 'deploy:cleanup' + end + end + end + + desc "Deploy '#{prefix}_#{instance}' from master" + task :deploy do + set :revision, 'master' + set :deploy_to, "/opt/www/#{prefix}_#{instance}" + set :instance, instance + set :prefix, prefix + deploy do + block.call(prefix, instance) + end + invoke 'deploy:cleanup' + end + end +end + +def instance_setup_task(prefix, instance) + namespace instance do + desc "Setup '#{prefix}_#{instance}'" + task :setup do + set :revision, 'master' + set :deploy_to, "/opt/www/#{prefix}_#{instance}" + set :instance, instance + set :prefix, prefix + invoke :setup + end + end +end + +def instance_manage_tasks(prefix, instance) + namespace instance do + desc "Start '#{prefix}_#{instance}'" + task :start do + set :deploy_to, "/opt/www/#{prefix}_#{instance}" + set :instance, instance + set :prefix, prefix + invoke :__start + end + + desc "Restart '#{prefix}_#{instance}'" + task :restart do + set :deploy_to, "/opt/www/#{prefix}_#{instance}" + set :instance, instance + set :prefix, prefix + invoke :__stop + queue 'sleep 10' + invoke :__start + end + + desc "Stop '#{prefix}_#{instance}'" + task :stop do + set :deploy_to, "/opt/www/#{prefix}_#{instance}" + set :instance, instance + set :prefix, prefix + invoke :__stop + end + + desc "Tail Log '#{prefix}_#{instance}'" + task :log do + set :deploy_to, "/opt/www/#{prefix}_#{instance}" + set :instance, instance + set :prefix, prefix + invoke :__log + end + end +end + +task :__git_clone do + queue %{ + echo "-----> Cloning the Git repository" + #{echo_cmd %[git clone "#{repository!}" .]} + } + + if revision != 'master' + queue %{ + echo "-----> Using revision #{revision}" && + #{echo_cmd %[git checkout "#{revision}"]} + } + end +end + +task :__start do + queue %{ + cd #{deploy_to}/current && bundle exec unicorn_rails -c /opt/unicorn-conf/#{prefix}_#{instance}.rb -E production -D && + echo "-----> #{instance} Started" + } +end + +task :__stop do + queue %{ + kill -QUIT `cat /opt/unicorn-pids/#{prefix}_#{instance}.pid`; true + echo "-----> #{instance} Stopped" + } +end + +task :__log do + queue %{ + cd #{deploy_to}/current && tail -400 log/production.log + } +end