我正在通过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} < ${build.dbdeploy.deployfile}" />
<echo message="Executing command: ${mysql.command}" />
<exec
command="${mysql.command}"
dir="${base.path}"
checkreturn="true" />
</target>
为什么dbdeploy会生成损坏的文件?
谢谢您的帮助!
最佳答案
自问这个问题以来已经有很长的时间了,但是我遇到了同样的问题,并且设法弄清了尼尔斯从这个问题来的方向。
我认为我们都遇到了这个问题,因为我们都遵循了Dave Marshall撰写的关于phing和dbdeploy的流行教程:http://davedevelopment.co.uk/2008/04/14/how-to-simple-database-migrations-with-phing-and-dbdeploy.html
在他的示例sql delat文件中,他在顶部包括-//,如果替换为/ * .... * /格式的注释,则可以避免此问题!
因此,我想说这是本教程的错误,至今已有8年的历史了。 Dave在本教程的顶部指出,大约4年前他改用了另一种方法,因此在本教程中现在有一个bug可以理解!不过,我将提交评论以请求更新,因为他的页面是搜索主题时排名最高的搜索结果,因此,如果我们可以像以前那样解决人们的麻烦,那将是很好的!
令人遗憾的是,phing没有以SQL异常的形式给出更详细的错误报告-有一个为dbdeploy脚本做出贡献的想法!