вся магия развертывания базы данных - это встроенная функциональность RoR, вы можете подражать ей, чтобы получить те же результаты.
Вам нужно будет подготовить сценарии для переноса базы данных, поэтому не используйте ихсценарий, каждое изменение базы данных требует нового сценария.Вам также нужно где-то хранить список уже выполненных миграций, для этого rails использует таблицу базы данных, но файл тоже может пригодиться для этого.
Возможно, вы захотите попробовать этот код:
set :mysql_params, "-u user -ppassword"
set :mysql_db_name, "database_name"
after :deploy, :migrate
desc "migrate database on server"
task :migrate do
run "touch #{shared_path}/migration.list ;
ls -1v #{current_path}/sql/*.sql 2>/dev/null > #{shared_path}/migration.available;
diff #{shared_path}/migration.available #{shared_path}/migration.list | awk \"/^</ {print \\$2}\" | while read f ;
do echo \"migrating $(basename $f)\"; mysql #{mysql_params} #{mysql_db_name} < $f && echo $f >> #{shared_path}/migration.list ; done;
rm -f #{shared_path}/migration.available"
end
after "deploy:setup", :create_db
desc "create database on server"
task :create_db do
run "mysql #{mysql_params} -e \"CREATE DATABASE #{mysql_db_name}\""
end
и, что наиболее важно для сохранения порядка миграций, вы должны называть ваши миграции последовательными числами или date_time, поэтому пример вывода ls -1v #{current_path}/migrations/*.sql
будет выглядеть следующим образом:
0001_create_database.sql
0002_create_user_table.sql
0003_add_password_to_users.sql
20101205_141534_add_admin_user.sql
20110108_090712_create_post_table.sql
20110210_165609_create_comment_table.sql
записи date_time используют формат YYYYmmdd_hhMMss_title.SQL