繁体   English   中英

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

[英]Capistrano: HowTo deploy MySQL database for a PHP application?

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

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

但是,现在我正在尝试使用MySQL数据库和这个应用程序,并且想知道,如果有可能部署数据库,以及使用Capistrano的远程服务器 - 这是为Rails的数据库完成的方式。

问候
尼基尔古普塔

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

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

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

数据库部署的全部魔力是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

据我所知,有3种全自动方法将数据库部署到生产服务器。

  • 使用liquibase ,编写(或生成 )包含迁移代码的变更集。
  • 使用事件源 ,关系读缓存具有与正常相同的结构。 使用您的版本发送架构转储。 清除整个读缓存,包括表。 使用转储重新创建表。 使用事件存储和投影在单个事务中重新插入数据。 回滚并不是那么难,您可以转储旧的读取缓存,或者您可以使用旧版本执行相同的步骤。
  • 为每个版本编写自己的迁移脚本和sql。 不推荐,因为它容易出错。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM