Drupal is a great piece of software, unfortunately it stores so much stuff in the db that people struggle keeping in sync the development server/box and a staging server to show their customers how the work is proceeding.
Today I will share the Capistrano tasks I use to sync my development box with the staging server. What I basically do is dumping the development db, sending it to the server via capistrano and then use the dump to replace the server’s database.
The following tasks should be used together with the tasks in my Deploying drupal with Capistrano article. I took advantage of deploy:cold not being needed with Drupal, and added a callback to it, so if you want to do a deploy that also updated the database you should use deploy:cold.
You should also have two settings files (usually stored in drupal_root/sites/default), one called settings.development.php, with your local database setup and one called settings.production.php with the remote database setup, the capistrano tasks will take care of choosing the correct one.
# Callbacks
before ‘deploy:start’, ‘drupal:db:import:production’
before ‘deploy:restart’, ‘drupal:configure:production’
before ‘deploy:start’, ‘drupal:configure:production’
before ‘deploy:cold’, ‘drupal:db:dump:development’
# DB Stuff
set :mysqldump, “/path/to/mysqldump”
set :local_db_user, “local_mysql_username”
set :local_db_password, “local_mysql_password”
set :local_db_name, “local_db_name”
set :db_user, “remote_mysql_username”
set :db_password, “remote_mysql_password”
set :db_name, “remote_db_name”
namespace :drupal do
namespace :configure do
task :production do
sudo “cp #{latest_release}/sites/default/settings.production.php #{latest_release}/sites/default/settings.php”
end
task :development do
sudo “cp #{latest_release}/sites/default/settings.development.php #{latest_release}/sites/default/settings.php”
end
end
namespace :db do
namespace :dump do
task :development do
raise RuntimeError.new(“failed dump”) unless system “#{mysqldump} -u #{local_db_user} –password=#{local_db_password} #{local_db_name} > dump.sql”
end
end
namespace :import do
task :production do
ENV[“FILES”] = “dump.sql”
deploy::upload
run “mysql -u #{db_user} –password=#{db_password} #{db_name} < #{latest_release}/dump.sql”
end
end
end
end
Continue reading » · Rating: · Written on: 06-15-07 ·
No Comments »