10

開発中の Propel プロジェクトで初めて移行を使用しようとしています (したがって、15MB のデータを再挿入する必要はありません) が、いくつかの問題があります。スキーマを変更して実行しましpropel-gen diffた。buildtime-conf.xmlファイルが見つからないというエラーを最初に受け取りました。私はまだそれを作っていませんでした (必要がなかったので) が、構造はruntime-conf.xml. にコピーruntime-conf.xmlしましたbuildtime-conf.xml。そして、次のエラーが表示されます。

[propel-sql-diff] Reading databases structure...
[phingcall] Unable to find adapter for datasource [project].
Execution of target "sql-diff" failed for the following reason: /var/www/project/vendor/propel/propel1/generator/build-propel.xml:317:26: Execution of the target buildfile failed. Aborting.
    [phing] /var/www/project/vendor/propel/propel1/generator/build-propel.xml:317:26: Execution of the target buildfile failed. Aborting.

私の実行時ファイルとビルド時ファイルは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <propel>
        <datasources default="project">
            <datasource id="project">
                <adapter>pgsql</adapter>
                <connection>
                    <dsn>pgsql:host=###.###.###.###;dbname=database</dsn>
                    <user>USER</user>
                    <password>PASS</password>
                </connection>
            </datasource>
        </datasources>
    </propel>
</config>

私のスキーマは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<database name="project" defaultIdMethod="native">
    <table schema="accounts" name="accounts" phpName="Account" package="accounts">
        <column />
    </table>
</database>

buildtime-conf を に変更しようとしたところ<datasource id="testing">、エラーが に変わりましたUnable to find adapter for datasource [testing]。したがって、私が知る限り、エラーは実際の buildtime-conf ファイル (スキーマではない) にあります。Propel が PostgreSQL のアダプターを見つけられなかったのではないかと思ったので (ランタイム conf では問題なく動作しますが)、アダプターを に変更してみましたmysql。同じアダプターが見つからないというエラーが発生しました。

私は完全に道に迷ってしまいました。

更新:そのため、例外がスローされ/Propel/runtime/lib/Propel.phpた行に移動して見つけることができました。Unable to find adapter行を追加して変数を手動で定義しましたが、self::$configuration['datasources'][$name]['adapter'] = 'pgsql'機能します。この変更をやり直さずに Propel を更新することはできないので、これは今のところ明らかに役に立ちません。私self::$configurationはPropel.phpにダンプしましたがNULL、それはなぜですか?

4

2 に答える 2

3

Propel の最新の安定版 (1.7.1) では、次のコードを追加することはできません:

self::$configuration['datasources'][$name]['adapter'] = 'mysql';

次のエラーが発生します。

Indirect modification of overloaded element of PropelConfiguration has no effect

そのため、使用できるアダプターが 1 つしかない場合:

/*
if (!isset(self::$configuration['datasources'][$name]['adapter'])) {
    throw new PropelException("Unable to find adapter for datasource [" . $name . "].");
}
*/
$db = DBAdapter::factory('mysql');
// register the adapter for this name
self::$adapterMap[$name] = $db;

このエラーは、./propel-gen diff を使用した場合にのみ発生します。それでも非常に奇妙です。彼らがすぐにそれを修正することを願っています。

于 2014-03-08T14:29:19.007 に答える