1

我正在使用 phing 和 dbdeploy 为我的 mysql 数据库生成部署文件。

生成的 dbdeploy 文件的输出如下所示:

    -- Fragment begins: 8 --
INSERT INTO changelog
                                (change_number, delta_set, start_dt, applied_by, description) VALUES (8, 'Main', NOW(), 'dbdeploy', '8-add_tracking_code.sql');
--//
ALTER TABLE `order` ADD `tracking_code` VARCHAR(255) NOT NULL;
UPDATE changelog
                             SET complete_dt = NOW()
                             WHERE change_number = 8
                             AND delta_set = 'Main';
-- Fragment ends: 8 --

问题是 --// 在 ALTER 语句之前。数据库出现错误。如果我删除 --// 孔文件是正确的。

这是我的一段 phing 构建脚本,以便您可以看到我是如何使用 dbdeploy 生成 .sql 文件的:

<target name="dbdeploy-migrate-all">

        <!-- load the dbdeploy task -->
        <taskdef name="dbdeploy" classname="phing.tasks.ext.dbdeploy.DbDeployTask"/>

        <echo message="Loading deltas from ${build.dbdeploy.alters_dir}" />

        <property name="build.dbdeploy.deployfile" value="${build.dbdeploy.deploy_dir}/deploy-${DSTAMP}${TSTAMP}.sql" />
        <property name="build.dbdeploy.undofile" value="${build.dbdeploy.undo_dir}/undo-${DSTAMP}${TSTAMP}.sql" />

        <!-- generate the deployment scripts -->
        <dbdeploy 
            url="mysql:host=${db.host};dbname=${db.name}"
            userid="${db.user}" 
            password="${db.pass}" 
            dir="${build.dbdeploy.alters_dir}" 
            outputfile="${build.dbdeploy.deployfile}" 
            undooutputfile="${build.dbdeploy.undofile}" />

        <!-- execute the SQL - Use mysql command line to avoid trouble with large files or many statements and PDO -->
        <property name="mysql.command" value="${progs.mysql} -h${db.host} -u${db.user} -p${db.pass} ${db.name} &lt; ${build.dbdeploy.deployfile}" />
        <echo message="Executing command: ${mysql.command}" />
        <exec
            command="${mysql.command}"
            dir="${base.path}"
            checkreturn="true" />

    </target>

为什么 dbdeploy 会生成损坏的文件?

感谢您的帮助!

4

1 回答 1

0

自从提出这个问题以来已经过去了很长时间,但是我遇到了同样的问题并设法弄清楚 Niels 是从哪里来的。

我认为我们都遇到了这个问题,因为我们都遵循了 Dave Marshall 的流行的 phing 和 dbdeploy 教程:http: //davedevelopment.co.uk/2008/04/14/how-to-simple-database-migrations-使用 phing 和 dbdeploy.html

在他的示例 sql delat 文件中,他在顶部包含 --// ,如果将其替换为 /* .... */ 格式的注释,则可以避免此问题!

所以我想说这是教程中的一个错误,现在已经有 8 年了。Dave 在教程顶部指出,大约 4 年前,他转向了另一种方法,因此教程中现在存在错误是可以理解的!不过,我会提交评论请求更新,因为他的页面在搜索该主题时是排名最高的搜索结果,所以如果我们能拯救人们遇到同样的问题,那就太好了!

很遗憾 phing 没有以 SQL 异常的形式给出更详细的错误报告 - 有一个对 dbdeploy 脚本做出贡献的想法!

于 2016-04-16T19:07:33.997 回答