Skip to content

Commit

Permalink
Adding deployment files
Browse files Browse the repository at this point in the history
  • Loading branch information
jcnetdev committed Jul 24, 2008
1 parent c46048e commit 9e5ac92
Show file tree
Hide file tree
Showing 3 changed files with 231 additions and 1 deletion.
3 changes: 3 additions & 0 deletions Capfile
@@ -0,0 +1,3 @@
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
load 'config/deploy'
227 changes: 227 additions & 0 deletions config/deploy.rb
@@ -0,0 +1,227 @@
set :application, "jobberrails"
set :server_name, "jobberrails.opensourcerails.com"

set :base_path, "/var/www"
set :deploy_to, "/var/www/production/#{application}"
set :apache_site_folder, "/etc/apache2/sites-enabled"


set :repository, "git://github.com/jcnetdev/jobberrails.git"
set :scm, "git"
set :checkout, "export"
set :deploy_via, :remote_cache

set :keep_releases, 3

set :user, 'deploy'
set :runner, 'deploy'
# =============================================================================
# You shouldn't have to modify the rest of these
# =============================================================================

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

set :use_sudo, true

# saves space by only keeping last 3 when running cleanup
set :keep_releases, 3

ssh_options[:paranoid] = false

# =============================================================================
# OVERRIDE TASKS
# =============================================================================
namespace :deploy do

desc "Restart Passenger"
task :restart, :roles => :app do
run "touch #{current_path}/tmp/restart.txt"
run "curl http://#{server_name}"
end

desc <<-DESC
Deploy and run pending migrations. This will work similarly to the \
`deploy' task, but will also run any pending migrations (via the \
`deploy:migrate' task) prior to updating the symlink. Note that the \
update in this case it is not atomic, and transactions are not used, \
because migrations are not guaranteed to be reversible.
DESC
task :migrations do
set :migrate_target, :latest
update_code
migrate
symlink
restart
end

desc "restart apache"
task :restart_apache do
sudo "/etc/init.d/apache2 stop"
sudo "/etc/init.d/apache2 start"
end

desc "start apache cluster"
task :start_apache do
sudo "/etc/init.d/apache2 start"
end

desc "stop apache cluster"
task :stop_apache do
sudo "/etc/init.d/apache2 stop"
end
end

before "deploy:restart", "admin:migrate"
after "deploy", "live:send_request"

after "deploy:setup", "init:database_yml"
after "deploy:setup", "init:create_database"
after "deploy:setup", "init:create_vhost"
after "deploy:setup", "init:enable_site"
namespace :init do
desc "create mysql db"
task :create_database do
#create the database on setup
set :db_user, Capistrano::CLI.ui.ask("database user: ") unless defined?(:db_user)
set :db_pass, Capistrano::CLI.password_prompt("database password: ") unless defined?(:db_pass)
run "echo \"CREATE DATABASE #{application}_production\" | mysql -u #{db_user} --password=#{db_pass}"
end

desc "enable site"
task :enable_site do
sudo "ln -nsf #{shared_path}/config/apache_site.conf #{apache_site_folder}/#{application}"

end


desc "create database.yml"
task :database_yml do
set :db_user, Capistrano::CLI.ui.ask("database user: ")
set :db_pass, Capistrano::CLI.password_prompt("database password: ")
database_configuration = %(
---
login: &login
adapter: mysql
database: #{application}_production
host: localhost
username: #{db_user}
password: #{db_pass}
production:
<<: *login
)
run "mkdir -p #{shared_path}/config"
put database_configuration, "#{shared_path}/config/database.yml"
end

desc "create vhost file"
task :create_vhost do

vhost_configuration = %(
<VirtualHost *:80>
ServerName #{server_name}
DocumentRoot /var/www/production/#{application}/current/public
</VirtualHost>
)

put vhost_configuration, "#{shared_path}/config/apache_site.conf"

end

end

after "deploy:update_code", "localize:install_gems"
after "deploy:update_code", "localize:copy_shared_configurations"

namespace :localize do
desc "copy shared configurations to current"
task :copy_shared_configurations, :roles => [:app] do
%w[database.yml].each do |f|
run "ln -nsf #{shared_path}/config/#{f} #{release_path}/config/#{f}"
end
end

desc "installs / upgrades gem dependencies "
task :install_gems, :roles => [:app] do
sudo "date" # fuck you capistrano
run "cd #{release_path} && sudo rake RAILS_ENV=production gems:install"
end

end

namespace :live do
desc "send request"
task :send_request do
url = "http://#{server_name}"
puts `curl #{url} -g`
end

desc "remotely console"
task :console, :roles => :app do
input = ''
run "cd #{current_path} && ./script/console production" do |channel, stream, data|
next if data.chomp == input.chomp || data.chomp == ''
print data
channel.send_data(input = $stdin.gets) if data =~ /^(>|\?)>/
end
end

desc "tail production log files"
task :tail_logs, :roles => :app do
run "tail -f #{shared_path}/log/production.log -n 200" do |channel, stream, data|
puts # for an extra line break before the host name
puts "#{channel[:host]}: #{data}"
break if stream == :err
end
end

desc "show environment variables"
task :env, :roles => :app do
run "env"
end

task :show_env do
run "env"
end

task :show_path do
run "echo #{current_path}"
end

desc "remotely console"
task :console, :roles => :app do
input = ''
run "cd #{current_path} && ./script/console production" do |channel, stream, data|
next if data.chomp == input.chomp || data.chomp == ''
print data
channel.send_data(input = $stdin.gets) if data =~ /^(>|\?)>/
end
end

desc "tail production log files"
task :tail_logs, :roles => :app do
run "tail -f #{shared_path}/log/production.log -n 200" do |channel, stream, data|
puts # for an extra line break before the host name
puts "#{channel[:host]}: #{data}"
break if stream == :err
end
end
end

namespace :admin do
task :set_schema_info do
new_schema_version = Capistrano::CLI.ui.ask "New Schema Info Version: "
run "cd #{current_path} && ./script/runner --environment=production 'ActiveRecord::Base.connection.execute(\"UPDATE schema_info SET version=#{new_schema_version}\")'"
end

task :migrate do
run "cd #{current_path} && sudo rake RAILS_ENV=production db:migrate"
end

task :remote_rake do
rake_command = Capistrano::CLI.ui.ask "Rake Command to run: "
run "cd #{current_path} && sudo rake RAILS_ENV=production #{rake_command}"
end
end
2 changes: 1 addition & 1 deletion db/schema.rb
Expand Up @@ -9,7 +9,7 @@
#
# It's strongly recommended to check this file into your version control system.

ActiveRecord::Schema.define(:version => 20080703181307) do
ActiveRecord::Schema.define do

create_table "admins", :force => true do |t|
t.string "login"
Expand Down

0 comments on commit 9e5ac92

Please sign in to comment.