Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 4th, 2012  |  syntax: None  |  size: 5.01 KB  |  hits: 12  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. # My ./config directory in silverstripe looks like this:
  2. # ./503.php <- a 503 Maintainance page
  3. # ./_ss_environment.php <- the production environment settings
  4. # ./deploy.rb <- is the recipe below
  5. #
  6.  
  7. # multiple stages
  8. set :stages, %w(staging dev production) # no info for production server yet
  9. set :default_stage, "dev"
  10. require 'capistrano/ext/multistage'
  11.  
  12. # Sample deploy script for each stage. Save in deploy/[stage name].rb
  13.  
  14.  
  15. # ================================ deploy/dev.rb =============================
  16. # set :deploy_to, "/path/to/server/html/root"
  17. # server "example.com", :app, :web, :dby
  18. #
  19. # # User settings
  20. # set :runner, "username"
  21. # set :user, "username"
  22. # set :use_sudo, false
  23. # set :webserver_group, "www-data"
  24. #
  25. # # DB settings
  26. # set :db_user, 'username'
  27. # set :db_password, 'password'
  28. # set :db_host, 'localhost'
  29. # set :db_name, 'example'
  30. #
  31. # set :env, 'dev'
  32. # ============================================================================
  33.  
  34.  
  35. # Application settings
  36. set :application, "example.com"
  37. set :shared_children, %w(assets)
  38. set :keep_releases, 4
  39.  
  40. # SCM settings
  41. # Your git clone URL
  42. set :repository, "username@example.com:example.git"
  43. set :scm, "git"
  44. set :branch, "master" # git branch to deploy
  45. set :scm_verbose, false
  46. # faster deploys
  47. set :deploy_via, :remote_cache
  48. # If git submodules is used, this is very much needed
  49. set :git_enable_submodules, 1
  50.  
  51. # theme settings (html5-boilerplate)
  52. set :theme_name, "example"
  53.  
  54.  
  55. # --------------------------------------------
  56. # SSH
  57. # --------------------------------------------
  58. ssh_options[:forward_agent] = false
  59. default_run_options[:pty] = true  # Must be set for the password prompt from git to work
  60. ssh_options[:port] = 22
  61.  
  62. namespace :deploy do
  63.  
  64.  
  65.   # tasks for setting up silverstripe environment
  66.   namespace :ss do
  67.       task :env_setup, :roles => :app do
  68.           run "if [ ! -d '#{release_path}/env_#{env}' ]; then mkdir '#{release_path}/env_#{env}'; fi"
  69.           #run "touch #{release_path}/env_#{env}"
  70.       end
  71.   end
  72.  
  73.   # tasks for html5-boilerplate
  74.   # deploy runs h5bp build script and creates a new theme using the release
  75.   # directory name h5bp build script needs to be customized for this to work
  76.   # correctly
  77.   namespace :h5bp do
  78.     # currently this is built locally and then uploated. better way to do this?
  79.     task :build, :roles => :app do
  80.       p `ant build -f ./themes/#{theme_name}/build/build.xml`
  81.       # run "ant build -f #{release_path}/themes/#{theme_name}/build/build.xml"
  82.       top.upload "./themes/publish", "#{latest_release}/themes/#{latest_release.split('/').last}", :via => :scp, :recursive => true
  83.  
  84.     end
  85.   end
  86.  
  87.         task :update_code, :except => { :no_release => true } do
  88.                 on_rollback {
  89.                         run "mysql -u#{db_user} -p#{db_password} -h#{db_host} #{db_name} < #{release_path}/backup.sql"
  90.                         run "rm -rf #{release_path}; true"
  91.                 }
  92.                 strategy.deploy!
  93.                 finalize_update
  94.         end
  95.        
  96.         task :finalize_update, :except => { :no_release => true } do
  97.                
  98.                 shared_children.each{ | folder |
  99.                         run "ln -s #{shared_path}/#{folder} #{latest_release}/#{folder}"
  100.                 }
  101.         end
  102.  
  103.   task :migrate do
  104.                 top.upload "./config/_ss_environment.php", "#{latest_release}/_ss_environment.php", :via => :scp
  105.                 # upload env-specific _config.php file
  106.                 top.upload "./config/ss/#{env}.php", "#{latest_release}/env_#{env}/_config.php", :via => :scp
  107.                 run "mkdir #{latest_release}/silverstripe-cache"
  108.                 run "#{latest_release}/sapphire/sake dev/build"
  109.                 run "chmod -R g+w #{latest_release}"
  110.     # run "chown -R :#{webserver-group} #{latest_release}" # don't need this on our configuration
  111.                 #logger.important "the migrate action doesnt make sense in our deploy"
  112.         end
  113.  
  114.         task :restart do
  115.                 #logger.important "the restart task doesnt make sense in our deploy"
  116.         end
  117.  
  118.  
  119.  
  120.         namespace :web do
  121.                 desc <<-DESC
  122.       Puts the site in 503 maintaince mode
  123.                 DESC
  124.                 task :disable, :roles => :web, :except => { :no_release => true } do
  125.                         if previous_release
  126.                                 logger.important "Putting site in maintaince"
  127.                                 top.upload "./config/503.php", "#{current_release}/maintainance.php", :via => :scp
  128.                         end
  129.                 end
  130.  
  131.                 desc <<-DESC
  132.       Removes the 503 maintaince mode
  133.                 DESC
  134.                 task :enable, :roles => :web, :except => { :no_release => true } do
  135.                         if previous_release
  136.                                 logger.important "Removing sites maintaince mode"
  137.                                 run "rm #{current_release}/maintainance.php"
  138.                         end
  139.                 end
  140.         end
  141.        
  142.  
  143.         namespace :db do
  144.                 task :backup, :except => { :no_release => true } do
  145.                         logger.important "Backing up database"
  146.                         run "mysqldump -u#{db_user} -p#{db_password} -h#{db_host} #{db_name} > #{latest_release}/backup.sql"
  147.                 end
  148.  
  149.                 task :restore, :except => { :no_release => true } do
  150.                                 logger.important "Restoring database"
  151.                                 run "mysql -u#{db_user} -p#{db_password} -h#{db_host} #{db_name} < #{latest_release}/backup.sql"
  152.                 end
  153.         end
  154.        
  155. end
  156.  
  157. before "deploy:migrate", "deploy:ss:env_setup"
  158. after "deploy:migrate", "deploy:h5bp:build"
  159. before "deploy:update_code", "deploy:web:disable"
  160. after "deploy:symlink", "deploy:db:backup"
  161. after "deploy:symlink", "deploy:migrate"
  162. after "deploy:symlink", "deploy:web:enable"
  163. after "rollback:cleanup", "deploy:db:restore"
  164. after "deploy:update", "deploy:cleanup"