Skip to content

Commit

Permalink
Switching to Boxcar Conductor for deployments
Browse files Browse the repository at this point in the history
  • Loading branch information
robbyrussell committed Aug 31, 2008
1 parent d6a9b03 commit 5431437
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 216 deletions.
2 changes: 1 addition & 1 deletion Capfile
@@ -1,3 +1,3 @@
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
load 'config/deploy'

Dir['vendor/plugins/boxcar-conductor/tasks/*.rb'].each { |plugin| load(plugin) }
237 changes: 22 additions & 215 deletions config/deploy.rb
@@ -1,7 +1,7 @@
# Required for using Mongrel with Capistrano2
# gem install palmtree

require 'palmtree/recipes/mongrel_cluster'
require 'highline/import'

########################################################################
# Rails Boxcar - Capistrano Deployment Recipe
Expand All @@ -14,223 +14,30 @@

# What is the hostname of your Rails Boxcar server?
# Example:
# set :boxcar_server, 'rc1.railsboxcar.com'
set :boxcar_server, 'rubyurl.com'
# set :boxcar_server, 'rc1.railsboxcar.com'
set :boxcar_server, '198.145.115.94'

# What is the username of your Rails Boxcar user that you want
# to deploy this application with?
# Example:
# set :boxcar_username, 'johnny'
set :boxcar_username, 'rubyurl'

# Where is your source code repository?
# Example:
# set :repository = 'http://svn.railsboxcar.com/my_cool_app/tags/CURRENT'
# set :svn_username, 'rubyurl'
# set :svn_repository_url, 'https://svn.roundhaus.com/planetargon/rubyurl_2-0/trunk'

set :repository, "git://github.com/robbyrussell/rubyurl.git"
set :scm, "git"
# set :scm_passphrase, "p00p"

# What database server are you using?
# Example:
set :database_name, { :development => 'rubyurl_development',
:test => 'rubyurl_test',
:production => 'rubyurl_production' }













########################################################################
# Advanced Configuration
# Only the courageous of ninjas dare pass this!
########################################################################

role :web, boxcar_server
role :app, boxcar_server
role :db, boxcar_server, :primary => true

# user
set :user, boxcar_username
set :use_sudo, false


set :domain_names, Proc.new { HighLine.ask("What is the primary domain name?") { |q| q.default = "railsboxcar.com" } }


# subversion / SCM
# Ask the user for their subversion password
# set :svn_password, Proc.new { HighLine.ask("What is your subversion password for #{svn_username}: ") { |q| q.echo = "x" } }
# set :repository, Proc.new { "--username #{svn_username} " + "--password #{svn_password} " + "#{svn_repository_url}" }
# set :checkout, 'export'

set :db_development,database_name[:development]
set :db_test, database_name[:test]
set :db_production, database_name[:production]
# to deploy this application with? Note that you should use the same
# username and password as you use to access your repository. This is
# due to a limitation in Capistrano.

# Prompt user to set database user/pass
set :database_username, Proc.new { HighLine.ask("What is your database username? ") { |q| q.default = "dbuser" } }
set :database_host, Proc.new { HighLine.ask("What host is your database running on? ") { |q| q.default = "localhost" } }
set :database_adapter, Proc.new {
choose do |menu|
menu.prompt = "What database server will you be using?"
menu.choices(:postgresql, :mysql)
end
}
set :database_password, Proc.new { HighLine.ask("What is your database user's password? ") { |q| q.echo = "x" } }
set :database_socket, Proc.new { HighLine.ask("Where is the MySQL socket file? ") { |q| q.default = "/var/run/mysqld/mysqld.sock" } }
set :database_port, Proc.new {
HighLine.ask("What port does your database run on? ") do |q|
if database_adapter.to_s == "postgresql"
q.default = "5432"
else
q.default = "3306"
end
end
}
set :boxcar_username, 'borat'

# directories
set :home, "/home/#{user}"
set :etc, "#{home}/etc"
set :log, "#{home}/log"
set :deploy_to, "#{home}/sites/#{application_name}"

set :shared_dir, "#{deploy_to}/shared"

# mongrel
# What port number should your mongrel cluster start on?
set :mongrel_port, Proc.new { HighLine.ask("What port will your mongrel cluster start with? ") { |q| q.default = "8000" } }

# How many instances of mongrel should be in your cluster?
set :mongrel_servers, Proc.new {
choose do |menu|
menu.prompt = "How many mongrel servers should run?"
menu.choices(1,2,3)
end
}

set :mongrel_conf, "#{etc}/mongrel_cluster.#{application_name}.conf"
set :mongrel_pid, "#{log}/mongrel_cluster.#{application_name}.pid"
set :mongrel_address, '127.0.0.1'
set :mongrel_environment, :production


# database.yml
desc "Create database.yml in shared/config"
task :after_setup do
puts "###########################################"
puts " Rails Boxcar - setup process"
puts "###########################################"
puts "# STEP 1: Database Configuration"
puts "###########################################"


today = Time.now.strftime('%b %d, %Y')

yml_comment = <<EOF
# Where is your source code repository?
#
# Generated on #{today} for Rails Boxcar (http://railsboxcar.com)
#
EOF

case database_adapter.to_s
when "postgresql"
database_configuration = <<EOF
#{yml_comment}
login: &login
adapter: #{database_adapter}
host: #{database_host}
port: #{database_port}
username: #{database_username}
password: #{database_password}
development:
database: #{db_development}
<<: *login
test:
database: #{db_test}
<<: *login
production:
database: #{db_production}
<<: *login
EOF

when "mysql"
database_configuration = <<EOF
#{yml_comment}
login: &login
adapter: #{database_adapter}
host: #{database_host}
port: #{database_port}
username: #{database_username}
password: #{database_password}
socket: #{database_socket}
development:
database: #{db_development}
<<: *login
test:
database: #{db_test}
<<: *login
production:
database: #{db_production}
<<: *login
EOF

end

mongrel_cluster_configuration = <<EOF
#{yml_comment}
---
port: #{mongrel_port}
pid_file: #{mongrel_pid}
servers: #{mongrel_servers}
cwd: #{deploy_to}/current
environment: production
EOF

puts "###########################################"
puts "Step 2: Creating necessary directories on\n your Rails Boxcar!"
puts "###########################################"
run "mkdir -p #{shared_dir}/config"

puts "###########################################"
puts "Step 3: Uploading database.yml to Boxcar"
puts "###########################################"

# Create the database.yml file
put database_configuration, "#{shared_dir}/config/database.yml"

puts "###########################################"
puts "Step 4: Uploding mongrel cluster config to\n your Rails Boxcar."
puts "###########################################"

# Create mongrel cluster configuration
put mongrel_cluster_configuration, mongrel_conf

puts "###########################################"
puts "DONE! Now run cap deploy:cold"
puts "###########################################"
end

desc "Link in the production database.yml"
task :after_update_code do
run "ln -nfs #{shared_dir}/config/database.yml #{release_path}/config/database.yml"

run "ln -nfs #{shared_dir}/log #{release_path}/log"
end
# Subversion Example:
#
#set :user, 'rubyurl'
#set :repository, 'https://svn.roundhaus.com/planetargon/rubyurl_2-0/trunk'
#
# If you won't be making any code changes on the boxcar itself, it's
# a good idea to do an export instead of a checkout (default) so that
# you avoid all of the .svn cruft.
#set :deploy_via, :export

#
# Git Example:
#
set :scm, "git"
set :repository, "git://github.com/robbyrussell/rubyurl.git"
1 change: 1 addition & 0 deletions vendor/plugins/boxcar-conductor
Submodule boxcar-conductor added at 83e929

0 comments on commit 5431437

Please sign in to comment.