lib/recipes/tools.rb
# This file is unused/unmaintained
namespace :tools do
rake_whitelist = [
'acts_as_licensed:import_au_cc_licenses', 'acts_as_licensed:import_nz_cc_licenses',
'kete:export:users', 'kete:import:users',
'kete:repair:check_uploaded_files', 'kete:repair:correct_upload_locations', 'kete:repair:fix_topic_versions', 'kete:repair:set_missing_contributors',
'kete:tools:remove_robots_txt',
'log:clear',
'time:zones:all', 'time:zones:local', 'time:zones:us',
'tmp:cache:clear', 'tmp:clear', 'tmp:create', 'tmp:pids:clear', 'tmp:sessions:clear', 'tmp:sockets:clear'
]
desc 'Run a rake command on the deploy server (some are disabled). Set RAKE_CMD to the task name, and RAKE_ENV (if needed) to the environment you want to run the task in.'
task :rake_run do
abort 'ERROR: Use RAKE_CMD to set the rake task you want to run (without the rake command itself).' unless ENV['RAKE_CMD']
abort 'ERROR: Cannot run a rake task that could lead to corrupt data. Run it on the actual server.' unless rake_whitelist.include?(ENV['RAKE_CMD'])
environment = ENV['RAKE_ENV'] ? "RAILS_ENV=#{ENV['RAKE_ENV']}" : ''
run "cd #{current_path} && #{environment} rake #{ENV['RAKE_CMD']}"
end
desc 'Shows tail of production log'
task :tail do
environment = ENV['RAILS_ENV'] || 'production'
run "tail -f #{current_path}/log/#{environment}.log"
end
task :default do
desc = <<-DESC
Capistrano Bells
Tools Recipe
Tasks for the general maintenance and development of web applications.
DESC
puts desc
end
namespace :ssh do
# TODO: Create SSH key generation task
desc 'Copies contents of ssh public keys into authorized_keys file'
task :setup do
sudo 'test -d ~/.ssh || mkdir ~/.ssh'
sudo 'chmod 0700 ~/.ssh'
put(
ssh_options[:keys].collect { |key| File.read(key + '.pub') }.join("\n"),
File.join('/home', user, '.ssh/authorized_keys'),
mode: 0600
)
end
end
desc 'Displays server uptime'
task :uptime do
run 'uptime'
end
desc 'Look for necessary commands for Rails deployment on remote server.'
task :look_for_commands do
%w(ruby rake svn).each do |command|
run "which #{command}"
end
end
namespace :aptitude do
desc 'Runs aptitude update on remote server'
task :update do
logger.info 'Running aptitude update'
sudo 'aptitude update'
end
desc 'Runs aptitude upgrade on remote server'
task :upgrade do
sudo_with_input 'aptitude upgrade', /^Do you want to continue\?/
end
desc 'Search for aptitude packages on remote server'
task :search do
puts 'Enter your search term:'
deb_pkg_term = $stdin.gets.chomp
logger.info 'Running aptitude update'
sudo 'aptitude update'
stream "aptitude search #{deb_pkg_term}"
end
desc 'Installs a package using the aptitude command on the remote server.'
task :install do
puts 'What is the name of the package(s) you wish to install?'
deb_pkg_name = $stdin.gets.chomp
raise 'Please specify deb_pkg_name' if deb_pkg_name == ''
logger.info 'Updating packages...'
sudo 'aptitude update'
logger.info "Installing #{deb_pkg_name}..."
sudo_with_input "aptitude install #{deb_pkg_name}", /^Do you want to continue\?/
end
end
namespace :svn do
desc 'remove and ignore log files and tmp from subversion'
task :clean do
logger.info 'removing log directory contents from svn'
system 'svn remove log/*'
logger.info 'ignoring log directory'
system "svn propset svn:ignore '*.log' log/"
system 'svn update log/'
logger.info 'ignoring tmp directory'
system "svn propset svn:ignore '*' tmp/"
system 'svn update tmp/'
logger.info 'committing changes'
system "svn commit -m 'Removed and ignored log files and tmp'"
end
desc 'Add new files to subversion'
task :add do
logger.info 'Adding unknown files to svn'
system "svn status | grep '^\?' | sed -e 's/? *//' | sed -e 's/ /\ /g' | xargs svn add"
end
desc 'Commits changes to subversion repository'
task :commit do
puts 'Enter log message:'
m = $stdin.gets.chomp
logger.info 'Committing changes...'
system "svn commit -m #{m}"
end
task :install do
sudo "chown -R #{user}:#{group} /usr/local/src"
run 'cd /usr/local/src && wget http://subversion.tigris.org/downloads/subversion-1.4.4.tar.gz'
stream 'tar -zxvf /usr/local/src/subversion-1.4.4.tar.gz'
run '/usr/local/src/subversion-1.4.4/configure && make && sudo make install'
end
end
namespace :gems do
task :default do
desc <<-DESC
Tasks to adminster Ruby Gems on a remote server: \
\
cap tools:gems:list \
cap tools:gems:update \
cap tools:gems:install \
cap tools:gems:remove \
DESC
puts desc
end
desc 'List gems on remote server'
task :list do
stream 'gem list'
end
desc 'Update gems on remote server'
task :update do
sudo 'gem update'
end
desc 'Install a gem on the remote server'
task :install do
# TODO: Figure out how to use Highline with this
puts "Enter the name of the gem you'd like to install:"
gem_name = $stdin.gets.chomp
logger.info "trying to install #{gem_name}"
sudo "gem install #{gem_name}"
end
desc 'Uninstall a gem from the remote server'
task :remove do
puts "Enter the name of the gem you'd like to remove:"
gem_name = $stdin.gets.chomp
logger.info "trying to remove #{gem_name}"
sudo "gem install #{gem_name}"
end
end
# Tab completion task (unfinished)
# namespace :tabs do
#
# desc "Install tab completion enabler script"
# task :setup do
# system "sudo cp vendor/plugins/bells/recipes/templates/complete /usr/local/bin/"
# system "sudo chmod 755 /usr/local/bin/complete"
# File.open("~/.bashrc", File::WRONLY|File::APPEND|File::CREAT) { |f| f.puts 'complete -C /usr/local/bin/complete -o default cap' }
# end
#
# desc "Update capistrano tab completion."
# task :update do
# system "rm ~/.captabs"
# end
#
# end
end