【问题标题】:Capistrano: HowTo deploy MySQL database for a PHP application?Capistrano:如何为 PHP 应用程序部署 MySQL 数据库?
【发布时间】:2011-03-09 13:58:58
【问题描述】:

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

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

但是,现在我正在尝试将 MySQL 数据库与此应用程序一起使用,并且想知道是否有可能在 Capistrano 的远程服务器上部署数据库 - 这是为 Rails 数据库完成的方式。

问候
尼基尔·古普塔

【问题讨论】:

  • 部署 MySQL 服务器并不常见,但您当然可以使用表部署数据库。

标签: php mysql capistrano


【解决方案1】:

关于这个问题,我迟到了,但无论如何我都会发帖,因为这是一个常见的问题,几乎没有答案。我将 Phing 和 Liquibase 结合使用取得了巨大成功,您可以使用 Liquibase 以高度形式化的方式向前和向后滚动数据库更改,甚至可以跟踪您在版本控制中的更改。

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

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

【讨论】:

  • 什么都没有,链接只指向作者的网站,仅此而已
【解决方案2】:

数据库部署的全部魅力在于 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】:

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

    • 使用liquibase,编写(或generate)变更集,其中包含您的迁移代码。
    • 使用event sourcing,具有与通常结构相同的关系读取缓存。随您的版本发送模式转储。清除包括表在内的整个读取缓存。使用转储重新创建表。使用事件存储和预测在单个事务中重新插入数据。回滚并不难,您可以转储旧的读取缓存,也可以按照与旧版本相同的步骤进行操作。
    • 为每个版本编写您自己的迁移脚本和 sql。不推荐,因为它容易出错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      相关资源
      最近更新 更多