mirror of
https://github.com/TracksApp/tracks.git
synced 2025-12-16 15:20:13 +01:00
Added an example of capistrano deployment recipes for deploying to a remote web host running Phusion Passenger (aka mod_rails), which is probably the easiest Rails deployment environment to configure.
This commit is contained in:
parent
3864c9e37a
commit
a1a8260f10
4 changed files with 131 additions and 0 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1,6 +1,7 @@
|
||||||
*.tmproj
|
*.tmproj
|
||||||
config/database.yml
|
config/database.yml
|
||||||
config/environment.rb
|
config/environment.rb
|
||||||
|
config/deploy.rb
|
||||||
log
|
log
|
||||||
tmp
|
tmp
|
||||||
db/data.yml
|
db/data.yml
|
||||||
|
|
|
||||||
2
Capfile
Normal file
2
Capfile
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
|
||||||
|
load 'config/deploy'
|
||||||
101
config/deploy.rb-example
Normal file
101
config/deploy.rb-example
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
#############################################################
|
||||||
|
# This file is designed as a starting point to use
|
||||||
|
# capistrano to deploy the trunk of tracks to a webhost
|
||||||
|
# where it is served using Phusion Passenger. For more
|
||||||
|
# info on getting started with Passenger, see
|
||||||
|
# http://www.modrails.com/
|
||||||
|
#############################################################
|
||||||
|
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Application
|
||||||
|
#############################################################
|
||||||
|
|
||||||
|
set :application, "tracks"
|
||||||
|
set :deploy_to, "/var/www/apps/tracks"
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Settings
|
||||||
|
#############################################################
|
||||||
|
|
||||||
|
default_run_options[:pty] = true
|
||||||
|
ssh_options[:forward_agent] = true
|
||||||
|
set :use_sudo, true
|
||||||
|
set :scm_verbose, true
|
||||||
|
set :rails_env, "production"
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Servers
|
||||||
|
#############################################################
|
||||||
|
|
||||||
|
#set :user, "your_login_name_on_your_webhost_if_different_from_local"
|
||||||
|
set :domain, "tracks.yoursite.com"
|
||||||
|
server domain, :app, :web
|
||||||
|
role :db, domain, :primary => true
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Git
|
||||||
|
#############################################################
|
||||||
|
|
||||||
|
set :scm, :git
|
||||||
|
set :branch, "master"
|
||||||
|
set :repository, "git://github.com/bsag/tracks.git"
|
||||||
|
set :deploy_via, :remote_cache
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Passenger
|
||||||
|
#############################################################
|
||||||
|
|
||||||
|
namespace :deploy do
|
||||||
|
desc "Symlink config files"
|
||||||
|
task :before_symlink do
|
||||||
|
run "rm #{release_path}/public/.htaccess" #not compatible with Passenger
|
||||||
|
run "ln -s #{shared_path}/config/database.yml #{release_path}/config/database.yml"
|
||||||
|
run "ln -s #{shared_path}/config/environment.rb #{release_path}/config/environment.rb"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Restart passenger on deploy
|
||||||
|
desc "Restarting mod_rails with restart.txt"
|
||||||
|
task :restart, :roles => :app, :except => { :no_release => true } do
|
||||||
|
run "touch #{current_path}/tmp/restart.txt"
|
||||||
|
end
|
||||||
|
|
||||||
|
[:start, :stop].each do |t|
|
||||||
|
desc "#{t} task is a no-op with mod_rails"
|
||||||
|
task t, :roles => :app do ; end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
namespace :db do
|
||||||
|
desc 'Dumps the production database to db/production_data.sql on the remote server'
|
||||||
|
task :remote_db_dump, :roles => :db, :only => { :primary => true } do
|
||||||
|
run "cd #{deploy_to}/#{current_dir} && " +
|
||||||
|
"rake RAILS_ENV=#{rails_env} db:dump_sql --trace"
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'Downloads db/production_data.sql from the remote production environment to your local machine'
|
||||||
|
task :remote_db_download, :roles => :db, :only => { :primary => true } do
|
||||||
|
execute_on_servers(options) do |servers|
|
||||||
|
self.sessions[servers.first].sftp.connect do |tsftp|
|
||||||
|
tsftp.download!("#{deploy_to}/#{current_dir}/db/production_data.sql", "db/production_data.sql")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'Cleans up data dump file'
|
||||||
|
task :remote_db_cleanup, :roles => :db, :only => { :primary => true } do
|
||||||
|
execute_on_servers(options) do |servers|
|
||||||
|
self.sessions[servers.first].sftp.connect do |tsftp|
|
||||||
|
tsftp.remove! "#{deploy_to}/#{current_dir}/db/production_data.sql"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'Dumps, downloads and then cleans up the production data dump'
|
||||||
|
task :remote_db_runner do
|
||||||
|
remote_db_dump
|
||||||
|
remote_db_download
|
||||||
|
remote_db_cleanup
|
||||||
|
end
|
||||||
|
end
|
||||||
27
lib/tasks/database.rake
Normal file
27
lib/tasks/database.rake
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
require 'rake'
|
||||||
|
|
||||||
|
namespace :db do
|
||||||
|
desc "Dump the current SQLite3 or MySQL database to a sql file"
|
||||||
|
task :dump_sql do
|
||||||
|
load 'config/environment.rb'
|
||||||
|
abcs = ActiveRecord::Base.configurations
|
||||||
|
case abcs[RAILS_ENV]["adapter"]
|
||||||
|
when 'mysql'
|
||||||
|
ActiveRecord::Base.establish_connection(abcs[RAILS_ENV])
|
||||||
|
File.open("db/#{RAILS_ENV}_data.sql", "w+") do |f|
|
||||||
|
if abcs[RAILS_ENV]["password"].blank?
|
||||||
|
f << `mysqldump -h #{abcs[RAILS_ENV]["host"]} -u #{abcs[RAILS_ENV]["username"]} #{abcs[RAILS_ENV]["database"]}`
|
||||||
|
else
|
||||||
|
f << `mysqldump -h #{abcs[RAILS_ENV]["host"]} -u #{abcs[RAILS_ENV]["username"]} -p#{abcs[RAILS_ENV]["password"]} #{abcs[RAILS_ENV]["database"]}`
|
||||||
|
end
|
||||||
|
end
|
||||||
|
when 'sqlite3'
|
||||||
|
ActiveRecord::Base.establish_connection(abcs[RAILS_ENV])
|
||||||
|
File.open("db/#{RAILS_ENV}_data.sql", "w+") do |f|
|
||||||
|
f << `sqlite3 #{abcs[RAILS_ENV]["database"]} .dump`
|
||||||
|
end
|
||||||
|
else
|
||||||
|
raise "Task not supported by '#{abcs[RAILS_ENV]['adapter']}'"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Add table
Add a link
Reference in a new issue