Capistrano:如何为PHP应用程序部署MySQL数据库?

Sto*_*oic 2 php mysql capistrano

我正在开发一个基于PHP的应用程序,并使用Capistrano将其部署到我的网络服务器.

到目前为止,我没有使用数据库,因此,部署运行良好.

但是,现在我正在尝试使用这个应用程序的MySQL数据库,并且想知道,如果有可能部署数据库,以及使用Capistrano的远程服务器 - 就像Rails的数据库那样.

关于
Nikhil Gupta

Jas*_*son 7

关于这个问题,我迟到了,但无论如何都要发帖,因为这是一个很少回答的常见问题.我一起使用Phing和Liquibase取得了巨大的成功,您可以使用Liquibase以高度正式的方式向前和向后滚动数据库更改,甚至可以跟踪版本控制中的更改.

我已经多次介绍过这个主题并将我的幻灯片(HTML格式)发布到GitHub:https://github.com/wjgilmore/Automating-Deployments-with-Phing--Capistrano-and-Liquibase

包括使用Capistrano部署PHP网站的奖励材料.:-)


mpa*_*pis 6

数据库部署的全部魔力是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
Run Code Online (Sandbox Code Playgroud)

最重要的是保留迁移顺序,您应该使用连续数字或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
Run Code Online (Sandbox Code Playgroud)

date_time条目使用格式YYYYmmdd_hhMMss_title.sql