easy capistrano remote invocation
Today I was coding just for fun … and wrote my own Capistrano script for deployment, during this I have found great way to invoke remote tasks.
The method is easy, add following code to your config/deploy.rb file:
set :sudo_call, ''
desc 'makes remote/rake calls to be executed with sudo'
task :use_sudo do
set :sudo_call, 'sudo'
end
desc 'run rake task'
task :rake do
ARGV.values_at(Range.new(ARGV.index('rake')+1,-1)).each do |task|
run "cd #{current_path}; #{sudo_call} RAILS_ENV=production rake #{task}"
end
exit(0)
end
desc 'run remote command'
task :remote do
command=ARGV.values_at(Range.new(ARGV.index('remote')+1,-1))
run "cd #{current_path}; #{sudo_call} RAILS_ENV=production #{command*' '}"
exit(0)
end
desc 'run specified rails code on server'
task :runner do
command=ARGV.values_at(Range.new(ARGV.index('runner')+1,-1))
run "cd #{current_path}; RAILS_ENV=production script/runner '#{command*' '}'"
exit(0)
end
Now try your new tool with following commands:
cap rake db:migrate
cap use_sudo rake db:migrate
cap remote "tail -n 10 log/production.log"
cap use_sudo remote cat /etc/passwd
cap runner p User.all
cap runner "User.all.each{ |u| p u }"
In the third call I have used parentheses to hide “-n” form Capistrano, because it is its parameter, to see whole list of Capistrano parameters call it with “cap –help”. For the last command I have used parentheses again because now it contained bash special characters.
Did You liked this post or maybe not, vote on it at dzone.


