#-- # $Id: remote.rake 179 2007-06-13 13:15:21Z aurelian $ #++ # remote host $host = 'example.com' # remote user $user = 'aurelian' # remote port $port = 2582 # reomte path $path = '/home/u8909192/www/example.com' begin # assume rubygems loaded require 'ruby-growl' require 'net/ssh' rescue LoadError => error # fail later puts "===> #{error}" end # {{{ remote_execute( session, command ) def remote_execute( session, command ) growl = Growl.new "localhost", "ruby-growl", ["ruby-growl"] session.open_channel do | channel | channel.on_data do | ch, data | puts "#{session.host} ===> #{data}" growl.notify "ruby-growl", "Got data from #{session.host}", data[0].to_s end channel.on_close do | ch | puts "#{session.host} ===> channel closed." growl.notify "ruby-growl", "Channel Closed", "Channel with #{session.host} succesfully closed" end growl.notify "ruby-growl", "Command Sent", command puts "===> Executing #{command}" channel.exec "cd #{$path} && #{command}" # channel.close end end # }}} # {{{ remote_session( command ) def remote_session( command ) Net::SSH.start( $host, $user, :port => $port ) do | session | remote_execute session, command session.loop end rescue StandardError => error puts "===> Got #{error.class.name}: " puts "===> #{error}" end # }}} namespace :remote do desc "Connect with ssh and list the top level project files (hello world)." task :connect do remote_session 'ls -la' end desc "Updates the code to the lastest revison (svn up -rENV['REV'])." task :update do rev = ENV['REV'].nil? ? 'HEAD' : ENV['REV'] remote_session "svn up -r#{rev}" #rake remote:update REV=444 end desc "Executes a rake command on the remote server" task :rake do cmd = ENV['CMD'].nil? ? '' : ENV['CMD'] #rake remote:rake CMD=db:migrate remote_session "rake #{cmd}" end namespace :mongrel do desc "Stops the mongrel cluster" task :stop do remote_session "mongrel_rails cluster::stop" end desc "Starts the mongrel cluster" task :start do remote_session "mongrel_rails cluster::start" end desc "Restarts the server" task :restart => [:stop, :start] do end end # /mongrel end # /remote