Propel PostgreSQL Migration не может найти адаптер
Я пытаюсь использовать миграцию в первый раз в моем проекте разработки Propel (так что мне не нужно вставлять 15 МБ данных), но у меня есть некоторые трудности. Я внес изменения в свою схему и выполнил 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 (хотя он отлично работает в моей среде исполнения), поэтому я попытался изменить адаптер на mysql
. Он обнаружил, что не удалось найти ошибку адаптера.
Я полностью потерян, мысли?
Обновление:, поэтому я смог войти в /Propel/runtime/lib/Propel.php
и найти строку, в которой было выбрано исключение Unable to find adapter
. Я вручную определил переменную, добавив строку self::$configuration['datasources'][$name]['adapter'] = 'pgsql'
, и она работает. На данный момент это явно не проверяется, так как я не смогу обновить Propel, не переделывая это изменение. Я сбросил self::$configuration
в Propel.php и это NULL
, любые идеи, почему?
Ответы
Ответ 1
Похоже, что переключение зависимостей Composer с dev-master
исправляет это: 20 фиксирует разницу между текущей версией (1.7.1) и мастер, на момент написания. Патч миграции специально здесь.
Надеюсь, релиз 1.7.2 будет сделан со временем, хотя следует отметить, что в настоящее время усилия по разработке команды, скорее всего, будут сосредоточены на Propel2 (все еще в альфа).
Ответ 2
В последней стабильной версии 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;
Эта ошибка возникает только при использовании. /propelgen. Все еще очень странно. Надеюсь, они скоро это исправит.