1

Phing と dbdeploy を使用して、mysql データベースの配置ファイルを生成しています。

生成される dbdeploy-file の出力は、次のようになります。

    -- 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 ステートメントの前の --// です。データベースにエラーが発生しました。--// を削除すると、ホール ファイルは正しくありません。

dbdeploy を使用して .sql ファイルを生成する方法を確認できるように、phing ビルド スクリプトの一部を次に示します。

<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- with-phing-and-dbdeploy.html

彼の例の sql delat ファイルでは、先頭に --// を含めていますが、これを /* .... */ 形式のコメントに置き換えると、この問題を回避できます!

つまり、これはチュートリアルのバグであり、現在は 8 年前のものです。Dave はチュートリアルの冒頭で、約 4 年前に別の方法に移行したことを指摘しているため、チュートリアルにバグが存在することはある程度理解できます。更新を求めるコメントを送信しますが、彼のページはトピックを検索すると検索結果の上位に表示されるため、同じ問題を抱えている人を救うことができれば幸いです!

phing が SQL 例外の形式でより詳細なエラー レポートを提供しなかったのは残念です。dbdeploy スクリプトへの貢献のアイデアがあります。

于 2016-04-16T19:07:33.997 に答える