-
-
Save frankyston/935ddf9860d269d0a27e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Mina Deploy | |
# =========== | |
# | |
# Adapted from Creative deploy stack in Manabalss v4, Mar.2015 | |
# On first deploy do: mina setup --verbose | |
# Then do : mina deploy --trace | |
# | |
# Usage: | |
# mina deploy --verbose # Standard deploy task | mina deploy[hard,seed] to hard-reset and seed | |
# mina rake[db:seed] | |
# mina oops # deletes the deploy.lock file in case a deployment messed up. | |
# mina boot # starts nginx and puma | |
# mina reboot # restarts nginx and puma | |
# mina puma_hard_reset # reset after major migrations or gem additions | |
# mina shutdown # stops puma (for DB manipulation) | |
# mina rollback # symlinks current to the previous release folder and deletes last release, restarts puma | |
require 'mina/bundler' | |
require 'mina/rails' | |
require 'mina/git' | |
require 'mina/rvm' # Creative uses rvm | |
require 'mina/nginx' | |
# Configure Production server info | |
set :app_name, 'cpp' | |
set :domain, '146.185.xxx.135' # Droplet IP | |
set :user, 'deployer' # Username in the server to SSH to. | |
set :port, 'xxxx' # SSH port number. | |
set :ssh_options, '-A' # Needed for git sync to work, check droplet setup | |
set :deploy_to, "/home/deployer/apps/#{app_name}" # Creative deploys to "/home/deployer/apps/<appname>" | |
set :current, "#{deploy_to}/current" | |
# Configure git repo location | |
set :repository, '[email protected]:CreativeMobile/cpp.git' # Git repo SSH clone link | |
set :branch, 'master' # Creative deploys master branch | |
# Aux | |
set :task, ENV['task'] | |
set :rails_env, 'production'# Creative calls the 'live' version production | |
set :term_mode, :system # Basic output, supports password prompt | |
# set :term_mode, :pretty # Does not support password input during deploy | |
set :bundle_binstubs, nil | |
task :environment do | |
invoke :'rvm:use[ruby-2.2.0@cpp]' # Set App's ruby here | |
end | |
# Manually create these paths in shared/ (eg: shared/config/database.yml) in your server. | |
set :shared_paths, ['config/database.yml', 'log', 'public/system', "puma" ] | |
desc "Deploys the current version to the server." | |
task :deploy => :environment do |t, hash| | |
deploy do | |
invoke :'git:clone' | |
invoke :'deploy:link_shared_paths' | |
invoke :'bundle:install' | |
invoke :'rails:db_migrate' | |
invoke :'rails:assets_precompile' | |
to :launch do | |
invoke :'nginx_link' | |
if hash.extras.include?("hard") | |
invoke :'puma_hard_reset' | |
else | |
invoke :'puma_reload' | |
end | |
invoke :"seed[#{hash.extras.include?("seed").to_s}]" | |
#invoke :'update_crontab' | |
#invoke :'run_resque' | |
invoke :'deploy:cleanup' | |
end | |
end | |
end | |
desc "Invokes a raketask" | |
task :invoke => :environment do | |
queue! "cd #{current}" | |
queue! "bundle exec rake #{ENV['task']} RAILS_ENV=production" | |
end | |
desc "Deletes deploy.lock to allow redeploy" | |
task :oops => :environment do | |
queue! "cd #{deploy_to}" | |
queue! "rm deploy.lock" | |
end | |
desc "Seed data to the database" | |
task :seed => :environment do |t, hash| | |
if hash.extras.include?("true") | |
puts "-----> Seeding!" | |
queue %[cd #{current}] | |
queue "bundle exec rake db:seed RAILS_ENV=production" | |
else | |
puts "-----> Seed absent, use 'mina deploy[seed]' if you need to seed\n" | |
end | |
end | |
desc "Reloads puma and nginx" | |
task :reboot => :environment do | |
invoke :'nginx:restart' | |
invoke :'puma_hard_reset' | |
end | |
desc "Reloads nginx" | |
task :reboot_nginx => :environment do | |
invoke :'nginx:restart' | |
end | |
desc "Updates the crontab" | |
task :update_crontab => :environment do | |
queue! %[cd #{current} && bundle exec whenever --update-crontab #{app_name}] | |
end | |
desc "Turns ON both nginx and puma" | |
task :boot => :environment do | |
queue! %[cd #{current}] | |
queue! %[bundle exec pumactl start] | |
invoke :'nginx:start' | |
end | |
desc "Turns OFF both nginx and puma" | |
task :shutdown => :environment do | |
queue! %[cd #{current}] | |
queue! %[bundle exec pumactl -p $(cat /home/deployer/apps/#{app_name}/puma/puma.pid) stop] | |
#invoke :'nginx:stop' | |
end | |
desc "Hard-resets puma" | |
task :puma_hard_reset => :environment do | |
queue! %[cd #{current}] | |
queue! %[(bundle exec pumactl -p $(cat /home/deployer/apps/#{app_name}/puma/puma.pid) stop && bundle exec pumactl start) || bundle exec pumactl start] | |
end | |
desc "Takes care of puma restart" | |
task :puma_reload => :environment do | |
queue! %[bundle exec pumactl -p $(cat /home/deployer/apps/#{app_name}/puma/puma.pid) phased-restart || bundle exec pumactl start] | |
end | |
desc "Takes care of nginx conf" | |
task :nginx_link => :environment do | |
queue! %[ln -nfs /home/deployer/apps/#{app_name}/current/config/deploy/nginx.conf /etc/nginx/sites-enabled/#{app_name}] | |
queue! %[ln -nfs /home/deployer/apps/#{app_name}/current/config/deploy/nginx.conf /etc/nginx/sites-available/#{app_name}] | |
queue! %[sudo nginx -s reload] | |
end | |
desc "Runs resque" | |
task :run_resque => :environment do | |
queue! "cd #{current}" | |
queue! "bundle exec rake resque:restart_workers RAILS_ENV=production" | |
end | |
resque:restart_workers | |
desc "Rolls back the latest release" | |
task :rollback => :environment do | |
queue! %[echo "-----> Rolling back to previous release for #{app_name}!"] | |
# Delete existing sym link and create a new symlink pointing to the previous release | |
queue %[echo -n "-----> Creating new symlink from the previous release: "] | |
queue %[ls "#{deploy_to}/releases" -Art | sort | tail -n 2 | head -n 1] | |
queue! %[ls -Art "#{deploy_to}/releases" | sort | tail -n 2 | head -n 1 | xargs -I active ln -nfs "#{deploy_to}/releases/active" "#{deploy_to}/current"] | |
# Remove latest release folder (active release) | |
queue %[echo -n "-----> Deleting active release: "] | |
queue %[ls "#{deploy_to}/releases" -Art | sort | tail -n 1] | |
queue! %[ls "#{deploy_to}/releases" -Art | sort | tail -n 1 | xargs -I active rm -rf "#{deploy_to}/releases/active"] | |
queue! %[cd #{current}] | |
queue! %[(bundle exec pumactl -p $(cat /home/deployer/apps/#{app_name}/puma/puma.pid) stop && bundle exec pumactl start) || bundle exec pumactl start] | |
end | |
# Put any custom mkdir's in here for when `mina setup` is ran. | |
# For Rails apps, we'll make some of the shared paths that are shared between | |
# all releases. | |
task :setup => :environment do | |
queue! %[mkdir -p "#{deploy_to}/shared/log"] | |
queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/log"] | |
queue! %[mkdir -p "#{deploy_to}/shared/config"] | |
queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/config"] | |
queue! %[mkdir -p "#{deploy_to}/shared/public"] | |
queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/public"] | |
queue! %[mkdir -p "#{deploy_to}/shared/public/system"] | |
queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/public/system"] | |
queue! %[touch "#{deploy_to}/shared/config/database.yml"] | |
queue %[echo "-----> Be sure to edit 'shared/config/database.yml'."] | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment