Подтвердить что ты не робот

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, любые идеи, почему?

4b9b3361

Ответ 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. Все еще очень странно. Надеюсь, они скоро это исправит.