Ошибка dbdeploy с -// в файле deploy

Я генерирую файлы развертывания для моей базы данных mysql с помощью phing и dbdeploy.

Вывод сгенерированного файла 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 build-скрипта, чтобы вы могли увидеть, как я генерирую.sql-файл с помощью dbdeploy:

<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 создает поврежденный файл?

Спасибо за вашу помощь!

1 ответ

Прошло много времени с тех пор, как был задан этот вопрос, однако я столкнулся с той же проблемой и сумел выяснить, откуда приходит Нильс.

Я думаю, что мы оба столкнулись с проблемой, потому что мы оба следовали популярному учебнику по phing и dbdeploy Дейва Маршалла здесь: http://davedevelopment.co.uk/2008/04/14/how-to-simple-database-migrations-with-phing-and-dbdeploy.html

В своем примере файл sql delat он включает в себя -// вверху, что, если заменить вместо него комментарий в формате /* .... */, позволяет избежать этой проблемы!

Так что я бы сказал, что это ошибка в руководстве, которому сейчас 8 лет. Дэйв отмечает в верхней части учебника, что около 4 лет назад он перешел на другой метод, поэтому вполне понятно, что теперь в учебнике есть ошибка! Я отправлю комментарий с просьбой об обновлении, потому что его страница является лучшим результатом поиска при поиске темы, поэтому было бы хорошо, если бы мы могли спасти людей от той же проблемы, что и у нас!

Это позор Phing не дал более подробный отчет об ошибке в виде исключения SQL - есть идея для вклада в сценарий dbdeploy!

Другие вопросы по тегам