Created
April 29, 2014 12:48
-
-
Save csouls/11399283 to your computer and use it in GitHub Desktop.
config/deploy.rb on simple deploy
This file contains 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
namespace :deploy do | |
set :db_user, 'set_db_user' | |
set :db_password, 'set_db_password' | |
set(:environment) { rails_env } | |
set :master, 'localhost' | |
set :slaves, [] | |
set :database_name, "dbprefix_#{rails_env}" | |
# memcached config => [hostname:port] | |
set :memcache_servers, ['localhost:11211'] | |
# redis config => [hostname, db_num] | |
set :redis_game, [['localhost', 0], ['localhost', 1]] | |
set :redis_game_slaves, [] | |
namespace :simple do | |
desc "Setup a GitHub-style deployment." | |
task :setup, :except => { :no_release => true } do | |
transaction do | |
on_rollback { run "rm -fr #{deploy_to}" } | |
run "mkdir -p #{releases_path} && chmod g+rw #{releases_path}" | |
# Then clone the code and change to the given branch | |
unless deployed_dir_exists?(".git") | |
run "umask 002 && git clone #{repository} #{releases_path}/current" | |
end | |
run 'git config --global user.email "deploy_user_email"' | |
run 'git config --global user.name "deploy_user_name"' | |
end | |
end | |
namespace :symlinks do | |
desc "Make all the symlinks" | |
task :make, :roles => :app, :except => { :no_release => true } do | |
symlinks = { | |
'assets' => 'public/assets', | |
'system' => 'public/system', | |
'log' => 'log', | |
'pids' => 'tmp/pids', | |
'sockets' => 'tmp/sockets', | |
} | |
# needed for some of the symlinks | |
run "rm -rf #{current_path} && ln -s #{releases_path}/current #{current_path}" | |
run "mkdir -p #{releases_path}/current/tmp" | |
commands = symlinks.map do |from, to| | |
"rm -rf #{current_path}/#{to} && mkdir -p #{shared_path}/#{from} && ln -s #{shared_path}/#{from} #{current_path}/#{to}" | |
end | |
commands << "rm -rf #{shared_path}/log && ln -s /media/ephemeral0/rails #{shared_path}/log" | |
run "cd #{current_path} && #{commands.join(" && ")}" | |
end | |
after "deploy:simple:setup", "deploy:simple:symlinks:make" | |
end | |
desc "Update the deployed code." | |
task :update_code, :except => { :no_release => true } do | |
on_rollback { git "reset --hard #{latest_tag}" if latest_tag } | |
git "fetch && git reset --hard origin/#{branch}" | |
run_current "bundle install" if trigger_update?("Gemfile.lock") | |
end | |
after "deploy:simple:setup", "deploy:simple:update_code" | |
# Tag `HEAD` with the release tag and message | |
desc "Update the REVISION." | |
task :tag, :except => { :no_release => true } do | |
set :release_tag, release_tag_from_repository | |
set :release_message, "Deployed at #{Time.now}" | |
on_rollback { git "tag -d #{release_tag}" } | |
if changed_files.count > 0 | |
git "tag #{release_tag} -m '#{release_message}'" | |
end | |
end | |
set(:setup_database_triggers, %w(templates/database.yml.erb templates/shards.yml.erb)) | |
namespace :conf do | |
desc 'Setup database.yml on simple deploy' | |
task :database do | |
if setup_database_triggers.detect {|path| trigger_update?(path)} | |
put conf_template('database.yml', binding), "#{current_path}/config/database.yml" | |
unless slaves.empty? | |
put conf_template('shards.yml', binding), "#{current_path}/config/shards.yml" | |
end | |
end | |
end | |
after "deploy:simple:update_code", "deploy:simple:conf:database" | |
desc 'Setup memcached.yml' | |
task :memcached do | |
if trigger_update?('templates/memcached.yml.erb') | |
put conf_template('memcached.yml', binding), "#{current_path}/config/memcached.yml" | |
end | |
end | |
after "deploy:simple:update_code", "deploy:simple:conf:memcached" | |
desc 'Setup redis.yml' | |
task :redis do | |
if trigger_update?('templates/redis.yml.erb') | |
put conf_template('redis.yml', binding), "#{current_path}/config/redis.yml" | |
end | |
end | |
after "deploy:simple:update_code", "deploy:simple:conf:redis" | |
end | |
desc "Create database" | |
task :create_database, :roles => :db, :except => { no_release: true } do | |
if setup_database_triggers.detect {|path| trigger_update?(path)} | |
run "cd #{current_path} && bundle exec rake db:create" | |
end | |
end | |
after "deploy:simple:conf:database", "deploy:simple:create_database" | |
desc 'Run the migrate rake task if migrations changed.' | |
task :migrate do | |
if trigger_update?('db/migrate') | |
run_bundle "rake db:migrate" | |
end | |
end | |
after "deploy:simple:update_code", "deploy:simple:migrate" | |
namespace :seed do | |
[:update, :truncate].each do |act| | |
desc "#{act} Game Master data if changed from previous version." | |
task act, :roles => :db, :except => {no_release: true} do | |
cond = act == :truncate ? "TRUNCATE=1" : "" | |
if trigger_update?("db/seeds") | |
tables = changed_files.grep(/\Adb\/seeds.*\.yml\Z/).map{|p| p.split('/').last.gsub('.yml', '') } | |
run_bundle "rake db:seed_fu TABLES=#{tables.join(',')} #{cond}" | |
end | |
end | |
end | |
after "deploy:simple:update_code", "deploy:simple:seed:update" | |
end | |
namespace :assets do | |
set(:asset_precompilation_triggers, %w(app/assets vendor/assets Gemfile.lock config)) | |
desc 'Run the asset precompilation rake task if assets changed.' | |
task :precompile do | |
if asset_precompilation_triggers.detect {|path| trigger_update?(path)} | |
run_bundle "rake RAILS_GROUPS=assets assets:precompile" | |
end | |
end | |
after "deploy:simple:update_code", "deploy:simple:assets:precompile" | |
end | |
desc "Restart the application following a deploy" | |
task :restart do | |
top.unicorn.restart | |
end | |
desc "Remove all deployed files" | |
task :destroy do | |
sudo "rm -rf #{releases_path}/current" | |
end | |
desc "Rollback to previous release." | |
task :rollback, :except => { :no_release => true } do | |
if latest_tag | |
git "tag -d #{latest_tag}" | |
git "reset --hard #{latest_tag(false)}" | |
restart | |
else | |
abort "This app is not currently deployed" | |
end | |
end | |
after "deploy:simple:setup", "god:start" | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment