Skip to content

Instantly share code, notes, and snippets.

@nacengineer
Created March 12, 2013 14:30
Show Gist options
  • Save nacengineer/5143331 to your computer and use it in GitHub Desktop.
Save nacengineer/5143331 to your computer and use it in GitHub Desktop.
Capistrano tricks to add to your deploy.rb file.
require 'capistrano_colors'
require 'capistrano/maintenance'
require 'capistrano/ext/multistage'
require 'colored'
require 'ruby_cowsay'
require 'manic_monkey'
# change this to ::INFO if you need more... umm... info
# change this to ::IMPORTANT for normal deploys
logger.level = Logger::IMPORTANT
capistrano_color_matchers = [
{ :match => /command finished/,
:color => :hide,
:prio => 10 },
{ :match => /executing command/,
:color => :blue,
:prio => 10,
:attribute => :underscore },
{ :match => /^transaction: commit$/,
:color => :magenta,
:prio => 10,
:attribute => :blink },
{ :match => /git/,
:color => :white,
:prio => 20,
:attribute => :reverse },
]
colorize( capistrano_color_matchers )
STDOUT.sync = true
def intro_cow( cow = 'stegosaurus')
cow = Cow.new({ :cow => cow })
msg = "#{Time.now.strftime("%c")}.\n Deploying to #{stage}, dude!"
cow.say(msg)
end
# spinner stuff
@spinner_running = false
@chars = ['|', '/', '-', '\\']
@spinner = Thread.new do
loop do
Thread.stop unless @spinner_running
print @chars[0]
sleep(0.1)
print "\b"
@chars.push @chars.shift
end
end
def start_spinner
@spinner_running = true
@spinner.wakeup
end
# stops the spinner and backspaces over last displayed character
def stop_spinner
@spinner_running = false
print "\b"
end
task :uname do
run "uname -a"
end
namespace :deploy do
[:restart, :stop, :start].each do |t|
desc "#{t.to_s.capitalize} the Unicorn web server"
task t, :roles => :app, :except => {:no_release => true} do
run "/etc/init.d/#{application} #{ t }"
end
end
task :symlink_logs, :roles => :web, :except => { :no_release => true } do
invoke_command <<-CMD, :via => run_method
cd #{release_path};
ln -nfs #{shared_path}/log #{release_path}/log;
CMD
end
task :symlink_database_yml, :roles => :web, :except => { :no_release => true } do
invoke_command <<-CMD, :via => run_method
cd #{release_path};
rm config/database.yml;
ln -nfs #{shared_path}/system/database.yml #{release_path}/config/database.yml;
CMD
end
task :symlink_database, :roles => :web, :except => { :no_release => true } do
invoke_command <<-CMD, :via => run_method
cd #{release_path};
ln -nfs #{shared_path}/db/production.sqlite3 #{release_path}/db/production.sqlite3;
CMD
end
task :symlink_assets, :roles => :web, :except => { :no_release => true } do
invoke_command <<-CMD, :via => run_method
cd #{release_path};
rm -rf #{release_path}/public/assets;
ln -nfs #{shared_path}/assets #{release_path}/public/assets;
CMD
end
task :symlink_devise_keys, :roles => :web, :except => { :no_release => true } do
invoke_command <<-CMD, :via => run_method
cd #{release_path};
ln -nfs #{shared_path}/config/devise_keys.rb #{release_path}/config/initializers/01_devise_keys.rb;
CMD
end
# we only want these for minimalized
if logger.level == 0
before 'deploy' do
puts intro_cow
end
before 'deploy:update_code' do
puts '---> '.green << 'Start Updating code'
end
after 'deploy:update_code' do
puts '---> '.green << 'Code updating finished? ' << ' YES'.green
end
before 'deploy:symlink_devise_keys' do
print ' --> '.yellow << 'Symlinking devise keys.............'
start_spinner()
end
after 'deploy:symlink_devise_keys' do
stop_spinner()
puts " ✓".green
end
before 'deploy:migrate' do
print ' --> '.yellow << 'Migrating database.................'
start_spinner()
end
after 'deploy:migrate' do
stop_spinner()
puts " ✓".green
end
before 'deploy:symlink_database' do
print ' --> '.yellow << 'Symlinking database................'
start_spinner()
end
after 'deploy:symlink_database' do
stop_spinner()
puts " ✓".green
end
before 'deploy:symlink_database_yml' do
print ' --> '.yellow << 'Symlinking database yml............'
start_spinner()
end
after 'deploy:symlink_database_yml' do
stop_spinner()
puts " ✓".green
end
before 'deploy:symlink_assets' do
print ' --> '.yellow << 'Symlinking asset files.............'
start_spinner()
end
after 'deploy:symlink_assets' do
stop_spinner()
puts " ✓".green
end
before "bundle:install" do
print " --> ".yellow << "Hardcore bundle action............"
start_spinner()
end
after "bundle:install" do
stop_spinner()
puts " ✓".green
end
before "deploy:assets:precompile" do
print " --> ".yellow << "Assets Precompilation............."
start_spinner()
end
after "deploy:assets:precompile" do
stop_spinner()
assets_skipped ? (puts " ✗ SKIP".red) : (puts " ✓".green)
end
before "deploy:assets_compress" do
print " --> ".yellow << "Assets Compress............."
start_spinner()
end
after "deploy:assets_compress" do
stop_spinner()
puts " ✓".green
end
before "deploy:stop" do
print "---> ".green << "#{server_type} stop................"
start_spinner()
end
after "deploy:stop" do
stop_spinner()
puts " ✓".green
end
before "deploy:start" do
print "---> ".green << "#{server_type} start..............."
start_spinner()
end
after "deploy:start" do
stop_spinner()
puts " ✓".green
end
before "deploy:restart" do
print "---> ".green << "#{server_type} restart............."
start_spinner()
end
after "deploy:restart" do
stop_spinner()
puts " ✓".green
end
before "deploy:web:disable" do
print "---> ".green << "Put maintenance screen............."
start_spinner()
end
after "deploy:web:disable" do
stop_spinner()
puts " ✓".green
end
before "deploy:web:enable" do
print "---> ".green << "Remove maintenance screen..."
start_spinner()
end
after "deploy:web:enable" do
stop_spinner()
puts " ✓".green
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment