Я разрабатываю приложение на базе PHP и использую Capistrano для его развертывания на своем веб-сервере.
До сих пор я не использовал Базы данных, и, следовательно, развертывание работало нормально.
Тем не менее, теперь я пытаюсь использовать базу данных MySQL также с этим приложением и задавался вопросом, есть ли возможность развертывания базы данных, а также на удаленном сервере с Capistrano – так, как это делается для баз данных Rails.
С уважением
Никиль Гупта
вся магия развертывания базы данных является встроенной функциональностью 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
Я опаздываю на вечеринку по этому вопросу, но все равно собираюсь публиковать, поскольку это общий вопрос с небольшим количеством ответов. Я имел большой успех, используя Phing и Liquibase вместе, вы можете использовать Liquibase для смены базы данных вперед и назад в формализованном виде и даже отслеживать изменения в управлении версиями.
Я неоднократно представлял эту тему и размещал свои слайды (формат HTML) в GitHub: https://github.com/wjgilmore/Automating-Deployments-with-Phing–Capistrano-and-Liquibase
Включает бонусный материал для развертывания веб-сайтов PHP с использованием Capistrano. 🙂
Насколько я знаю, есть 3 полностью автоматических подхода к развертыванию базы данных на производственном сервере.