set :stages, %w(production) set :default_stage, "production" require 'capistrano/ext/multistage' rails_env = fetch(:rails_env, "production") after "deploy", "deploy:cleanup" after "deploy:migrations", "deploy:cleanup" after "deploy:migrate", "deploy:restart" after "deploy:update_code", "symlink_files", "symlink_database_yml", "symlink_blog" after "deploy:update_code", "install_gems" after "deploy:update_code", "db:insert_required_data" task :symlink_files, :roles => [:app, :db] do run "ln -nfs #{shared_path}/files #{release_path}/public/files" end task :symlink_blog, :roles => [:app, :db] do run "ln -nfs #{shared_path}/blog #{release_path}/public/blog" end task :install_gems, :roles => [:app, :db] do run "cd #{latest_release}; rake gems:install" end task :symlink_database_yml, :roles => [:app, :db] do run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml" end task :symlink_htaccess, :roles => [:app, :db] do run "ln -nfs #{shared_path}/config/.htaccess #{release_path}/public/.htaccess" end namespace :deploy do desc "Restart app" task :restart, :roles => :app do run "cd #{current_path} && chmod 755 #{chmod755}" run "kill -s USR2 `cat /tmp/componentowl.com.pid`" end desc "Update the crontab file" task :update_crontab, :roles => :cron, :only => { :primary => true } do run "cd #{current_path} && whenever --update-crontab #{application} --set 'environment=production&pwd=#{current_path}'" end desc "Recreate symlink" task :resymlink, :roles => :app do run "rm -f #{current_path} && ln -s #{release_path} #{current_path}" end desc "Upload assets to CloudFront" task :assets do rails_env = fetch(:rails_env, "production") run "cd #{release_path} && rake RAILS_ENV=#{rails_env} dextronet_core:assets_to_cloudfront" end end namespace :db do desc "Dump DB" task :dump, :roles => :db, :only => { :primary => true } do run "cd #{latest_release}; rake iquest:db:dump OUTPUT_DIR=#{shared_path}/db RAILS_ENV=production" end desc "Insert required data" task :insert_required_data, :roles => :db, :only => { :primary => true } do rails_env = fetch(:rails_env, "production") run "cd #{latest_release}; rake RAILS_ENV=#{rails_env} dextronet_core:import:all" end end namespace :less do desc 'Updates the stylesheets generated by LESS CSS' task :update do run "cd #{release_path} && rake less:update RAILS_ENV=#{rails_env}" end end namespace :asset do namespace :packager do desc "Build all assets" task :build_all do run "cd #{release_path} && rake asset:packager:build_all" end end end after "deploy:update_code", "asset:packager:build_all" before "asset:packager:build_all", "less:update" #after "asset:packager:build_all", "deploy:assets"