7. Rails : Web development
=
Capistrano : Sys.administration
8. Capistrano basics
•SSH to the remote machines
•Posix compatible shell
•Same password or public key
•a bit of ruby knowledge
•works from a command line
9. Capistrano basics
•Capfile (makefile, rakefile, ...)
•It’s ruby
task :dump_db, :hosts => quot;database.spazidigitali.comquot; do
run quot;mysqldump -u deploy sd_production > /home/luca/dumps/db.sqlquot;
end
cap dump_db
11. set :gateway, quot;firewall.spazidigitali.comquot;
role :sd_db, quot;database.spazidigitali.comquot;
task :dump_db do
run quot;mysqldump -u deploy sd_production > /home/luca/dumps/db.sqlquot;
end
task :free_space do
run quot;df -hquot;
end
cap dump_db
12. set :gateway, quot;firewall.spazidigitali.comquot;
role :sd_db, quot;database.spazidigitali.comquot;, quot;replica.spazidigitali.comquot;
task :dump_db do
run quot;mysqldump -u deploy sd_production > /home/luca/dumps/db.sqlquot;
end
task :free_space do
run quot;df -hquot;
end
cap dump_db
13. set :gateway, quot;firewall.spazidigitali.comquot;
role :sd_db, quot;database.spazidigitali.comquot;, quot;replica.spazidigitali.comquot;
role :sd_app, quot;mongrels.spazidigitali.comquot;
task :dump_db, :roles=>:sd_db do
run quot;mysqldump -u deploy sd_production > /home/luca/dumps/db.sqlquot;
end
task :free_space, :roles=>[:sd_db, :sd_app ] do
run quot;df -hquot;
end
cap dump_db
14. set :gateway, quot;firewall.spazidigitali.comquot;
role :sd_db, quot;database.spazidigitali.comquot;, quot;replica.spazidigitali.comquot;
role :sd_app, quot;mongrels.spazidigitali.comquot;
namespace :spazidig do
desc quot;Dumping our DBsquot;
task :dump_db, :roles=>:sd_db do
run quot;mysqldump -u deploy sd_production > /home/luca/dumps/db.sqlquot;
end
desc quot;Checking free spacequot;
task :free_space, :roles=>[:sd_db, :sd_app ]do
run quot;df -hquot;
end
end
cap spazidig:dump_db
15. set :gateway, quot;firewall.spazidigitali.comquot;
role :sd_db, quot;database.spazidigitali.comquot;, quot;replica.spazidigitali.comquot;
role :sd_app, quot;mongrels.spazidigitali.comquot;
namespace :spazidig do
desc quot;What??quot;
task :default do
run quot;uname -aquot;
end
desc quot;Dumping our DBsquot;
task :dump_db, :roles=>:sd_db do
run quot;mysqldump -u deploy sd_production > /home/luca/dumps/db.sqlquot;
end
desc quot;Checking free spacequot;
task :free_space, :roles=>[:sd_db, :sd_app ]do
run quot;df -hquot;
end
end
cap spazidig
spazidig:dump_db
cap dump_db
cap spazidig:free_space
16. set :gateway, quot;firewall.spazidigitali.comquot;
role :sd_db, quot;database.spazidigitali.comquot;, quot;replica.spazidigitali.comquot;
role :sd_app, quot;mongrels.spazidigitali.comquot;
set :destination, quot;db.sqlquot;
namespace :spazidig do
desc quot;Dumping our DBsquot;
task :dump_db, :roles=>:sd_db do
run quot;mysqldump -u deploy sd_production > /home/luca/dumps/#{destination}.sqlquot;
end
end
cap spazidig:dump_db
17. set :gateway, quot;firewall.spazidigitali.comquot;
role :sd_db, quot;database.spazidigitali.comquot;, quot;replica.spazidigitali.comquot;
role :sd_app, quot;mongrels.spazidigitali.comquot;
set :destination, quot;db.sqlquot;
set(:database) do
Capistrano::CLI.ui.ask quot;Which database?: quot;
end
namespace :spazidig do
desc quot;Dumping our DBsquot;
task :dump_db, :roles=>:sd_db do
run quot;mysqldump -u deploy #{database} > /home/luca/dumps/#{destination}.sqlquot;
end
end
cap spazidig:dump_db
18. task :deploy do
transaction do
try_this
then_do_that
end
end
task :try_this do
on_rollback { run quot;do_cleanupquot; }
#...
end
task :then_do_that do
on_rollback { run quot;do_super_cleanupquot; }
#...
end
19. on :event, :callback, :only => %w(tasks_to_do)
# :load, :exit, :start, :finish, :begin, :after
trigger :notify, current_task
on :notify, :callback
20. load_paths << quot;config/deployquot;
case ENV['STAGE']
when quot;productionquot; then
load quot;productionquot;
when quot;stagingquot; then
load quot;stagingquot;
else
abort quot;unknown stage: #{ENV['STAGE']}quot;
end
21. before :deploy, :run_tests
after quot;deploy:update_codequot;, :link_database_yml
task :run_tests do
system quot;rakequot; or abort quot;tests failedquot;
end
task :link_database_yml do
run quot;ln -s #{release_path}/config/database.yml #{shared_path}/database.ymlquot;
end