aristotelisch
12/6/2013 - 11:33 AM

deploy.rb

deploy.rb

namespace :s3 do
  desc "Create s3 config yaml in shared path"
  task :configure do
    set :s3_bucket do
      "lolwuts"
    end

    set :access_key_id do
      Capistrano::CLI.password_prompt "Enter your amazon s3 access key id: "
    end
    
    set :secret_access_key do
      Capistrano::CLI.password_prompt "Enter your amazon s3 secret access key: "
    end

    s3_config = <<-EOF
      production:
        access_key_id: #{access_key_id}
        secret_access_key: #{secret_access_key}
        bucket: #{s3_bucket}
    EOF

    run "mkdir -p #{shared_path}/config"
    put s3_config, "#{shared_path}/config/s3.yml"
  end

  desc "Make symlink for s3 yaml"
  task :symlink do
    run "ln -nfs #{shared_path}/config/s3.yml #{latest_release}/config/s3.yml"
  end
end
# Bundler Integration
require "bundler/capistrano"

# Application Settings
set :application,   "yourapplicationname"
set :user,          "serveruser"
set :deploy_to,     "/home/#{user}/rails-applications/#{application}"
set :rails_env,     "production"
set :use_sudo,      false
set :keep_releases, 3

# Git Settings
set :scm,           :git
set :branch,        "master"
set :repository,    "git@github.com..."
set :deploy_via,    :remote_cache

# Uses local instead of remote server keys, good for github ssh key deploy.
ssh_options[:forward_agent] = true

# Server Roles
role :web, "127.0.0.1"
role :app, "127.0.0.1"
role :db,  "127.0.0.1", :primary => true

# Passenger Deploy Reconfigure
namespace :deploy do
  desc "Restart passenger process"
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "touch #{current_path}/tmp/restart.txt"
  end

  [:start, :stop].each do |t|
    desc "#{t} does nothing for passenger"
    task t, :roles => :app do ; end
  end
end

before "deploy:setup", "db:configure"
after  "deploy:update_code", "db:symlink"

namespace :db do
  desc "Create database yaml in shared path"
  task :configure do
    set :database_username do
      "rails"
    end

    set :database_password do
      Capistrano::CLI.password_prompt "Database Password: "
    end

    db_config = <<-EOF
      base: &base
        adapter: mysql
        encoding: utf8
        reconnect: false
        pool: 5
        username: #{database_username}
        password: #{database_password}

      development:
        database: #{application}_development
        <<: *base

      test:
        database: #{application}_test
        <<: *base

      production:
        database: #{application}_production
        <<: *base
    EOF

    run "mkdir -p #{shared_path}/config"
    put db_config, "#{shared_path}/config/database.yml"
  end

  desc "Make symlink for database yaml"
  task :symlink do
    run "ln -nfs #{shared_path}/config/database.yml #{latest_release}/config/database.yml"
  end
end
# In the Gemfile you need these gems
# gem 'capistrano', '~> 2.15', group: :development
# gem 'capistrano-rails'
# gem 'rvm-capistrano'
# 

# Bundler Integration
require "bundler/capistrano"
require "rvm/capistrano"

# Application Settings
set :application,   "yourapplicationname"
set :user,          "serveruser"
set :deploy_to,     "/home/#{user}/apps/#{application}"
set :rails_env,     "production"
set :use_sudo,      false
set :keep_releases, 5

# Rvm settings
set :rvm_ruby_string, 'default'
set :rvm_type, :user
# Git Settings
set :scm,           :git
set :branch,        "master"
set :repository,    "git@bitbucket.org..."
set :deploy_via,    :remote_cache


# SSH settings
ssh_options[:forward_agent] = true
ssh_options[:port] = port_number

# Uses local instead of remote server keys, good for github ssh key deploy.
default_run_options[:pty] = true


# Server Roles
role :web, "127.0.0.1"
role :app, "127.0.0.1"
role :db,  "127.0.0.1", :primary => true

before "deploy:setup", "db:configure"
after  "db:configure", "db:create"
after  "deploy:update_code", "db:symlink"

# Passenger Deploy Reconfigure
namespace :deploy do
  task :start do ; end
  task :stop do ; end
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "touch #{File.join(current_path,'tmp','restart.txt')}"
  end
end


namespace :db do
  desc "Create database yaml in shared path"
  task :configure do
    set :database_username do
      "rails"
    end

    set :database_password do
      Capistrano::CLI.password_prompt "Database Password: "
    end

    db_config = <<-EOF
      base: &base
        adapter: mysql2
        encoding: utf8
        reconnect: false
        pool: 5
        username: #{database_username}
        password: #{database_password}

      development:
        database: #{application}_development
        <<: *base

      test:
        database: #{application}_test
        <<: *base

      production:
        database: #{application}_production
        <<: *base
    EOF

    run "mkdir -p #{shared_path}/config"
    put db_config, "#{shared_path}/config/database.yml"
  end

  desc "Make symlink for database yaml"
  task :symlink do
    run "ln -nfs #{shared_path}/config/database.yml #{latest_release}/config/database.yml"
  end
  task :create do
    run "cd #{current_path} && bundle exec rake db:create"
  end
end