Capistrano: Как развернуть базу данных MySQL для приложения PHP?

Я разрабатываю приложение на основе PHP и использую Capistrano для его развертывания на своем веб-сервере.

До сих пор я не использовал базы данных, поэтому развертывание проходило нормально.

Однако теперь я пытаюсь использовать базу данных MySQL с этим приложением, и мне было интересно, есть ли возможность развертывания базы данных также на удаленном сервере с Capistrano - так, как это делается для баз данных Rails.

С уважением
Нихил Гупта


person Stoic    schedule 09.03.2011    source источник
comment
Развертывание сервера MySQL не является обычным делом, но вы, конечно, можете развернуть базу данных с таблицами.   -  person powtac    schedule 09.03.2011


Ответы (3)


вся магия развертывания базы данных — это собственная функциональность 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

и самое главное, чтобы сохранить порядок миграций, вы должны называть свои миграции последовательными номерами или датой_времени, поэтому пример вывода 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

person mpapis    schedule 16.03.2011

Я опаздываю на вечеринку по этому вопросу, но все равно собираюсь опубликовать, так как это распространенный вопрос с несколькими ответами. Я добился большого успеха, используя Phing и Liquibase вместе, вы можете использовать Liquibase для отката изменений базы данных вперед и назад в строго формализованной манере и даже можете отслеживать свои изменения в контроле версий.

Я несколько раз выступал на эту тему и размещал свои слайды (в формате HTML) на GitHub: https://github.com/wjgilmore/Automating-Deployments-with-Phing--Capistrano-and-Liquibase

Включает дополнительные материалы по развертыванию веб-сайтов PHP с помощью Capistrano. :-)

person Jason    schedule 19.04.2011
comment
Там ничего нет, ссылка только ведет на сайт автора и все - person AAgg; 21.08.2016

Насколько я знаю, есть 3 полностью автоматических подхода к развертыванию базы данных на рабочем сервере.

  • Используйте liquibase, напишите (или генерировать) наборы изменений, которые содержат ваш код миграции.
  • Используйте источники событий с реляционным кэшем чтения, имеющим ту же структуру, что и обычно. . Отправьте дамп схемы с вашими релизами. Очистить весь кеш чтения, включая таблицы. Пересоздайте таблицы, используя дамп. Повторно вставьте данные в одну транзакцию, используя хранилище событий и прогнозы. Откат не так сложен, вы можете сбросить свой старый кеш чтения, или вы можете выполнить те же действия со старым релизом.
  • Напишите свой собственный сценарий миграции и sql для каждого выпуска. Не рекомендуется, потому что это подвержено ошибкам.
person inf3rno    schedule 15.05.2014