我正在尝试在我的开发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的适配器(即使它在我的runtime-conf中工作正常),所以我尝试将我的适配器更改为mysql
。它提出了同样的无法找到适配器错误。
我完全迷失了,想法?
更新:,因此我可以进入/Propel/runtime/lib/Propel.php
并找到引发Unable to find adapter
例外的行。我通过添加行self::$configuration['datasources'][$name]['adapter'] = 'pgsql'
手动定义变量,它可以工作。这显然不是现在验证有用,因为我无法在不重做此更改的情况下更新Propel。我在Propel.php中转储self::$configuration
,它是NULL
,有什么想法吗?
答案 0 :(得分:3)
在最新的稳定版Propel(1.7.1)中,添加以下代码是不可能的:
self::$configuration['datasources'][$name]['adapter'] = 'mysql';
导致以下错误:
Indirect modification of overloaded element of PropelConfiguration has no effect
这就是为什么,如果你只有一个适配器,你可以使用:
/*
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时才会发生此错误。还是很奇怪。希望他们能尽快解决。
答案 1 :(得分:3)
看起来将Composer依赖关系切换到dev-master
修复此问题 - 在撰写本文时,当前版本(1.7.1)与master之间存在20 commits difference。迁移补丁专门针对is here。
希望在适当的时候发布1.7.2版本,但应该注意的是,团队的开发工作目前可能会集中在Propel2上(仍然是alpha版)。