2013-06-18 11 views
10

Sto provando a utilizzare le migrazioni per la prima volta sul mio progetto Propel in fase di sviluppo (quindi non devo reinserire 15 MB di dati), ma sto avendo alcune difficoltà. Ho apportato le modifiche al mio schema e ho eseguito propel-gen diff. Ho ricevuto per la prima volta un errore che non è stato in grado di individuare il mio file buildtime-conf.xml. Non ne avevo ancora creato uno (dal momento che non era necessario), ma ho letto che la struttura doveva essere uguale a runtime-conf.xml. Ho copiato runtime-conf.xml in buildtime-conf.xml. E ora visualizzato il seguente errore:Propel PostgreSQL Migrazione impossibile trovare l'adattatore

[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. 

miei runtime e Buildtime file simile al seguente:

<?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> 

mio schema è lungo le linee di questo:

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

Ho provato a cambiare buildtime-conf a <datasource id="testing"> e l'errore è stato modificato in Unable to find adapter for datasource [testing]. Quindi l'errore si trova nel vero file buildtime-conf (non nello schema), per quanto posso dire. Ho pensato che forse Propel non riusciva a trovare l'adattatore di PostgreSQL (anche se funziona bene nel mio runtime-conf), quindi ho provato a cambiare il mio adattatore su mysql. È venuto fuori con lo stesso in grado di trovare l'errore dell'adattatore.

Sono completamente perso, pensieri?

Update: quindi ero in grado di andare in /Propel/runtime/lib/Propel.php e individuare la linea dove è stato gettato l'eccezione Unable to find adapter. Ho definito manualmente la variabile aggiungendo la riga self::$configuration['datasources'][$name]['adapter'] = 'pgsql' e funziona. Questo ovviamente non è la verifica utile per ora, in quanto non sarà in grado di aggiornare Propel senza ripetere questa modifica. Ho scaricato self::$configuration in Propel.php ed è NULL, qualche idea perché?

+0

Quale versione stai eseguendo? Se è 1.6, è ancora in supporto afaik - mi piacerebbe presentare un bug. Sembra che la migrazione non stia inizializzando la connessione, anche se non conosco affatto l'interno. Inoltre, se vuoi comprimere uno schema completo.xml e build.properties, proverò una migrazione sulla mia macchina, se vuoi (non li hai ancora provati, ma mantieni il significato per aggirarli!). – halfer

risposta

3

Sembra che il passaggio da una dipendenza Composer a dev-master risolva questo - c'è 20 commits difference tra la versione corrente (1.7.1) e quella principale, al momento della scrittura. La patch di migrazione specifica is here.

Si spera che verrà rilasciata una versione 1.7.2 a tempo debito, sebbene si tenga presente che lo sforzo di sviluppo del team sarà probabilmente focalizzato su Propel2 attualmente (ancora in alpha).

+0

Incredibile, buona scoperta e grazie per essere tornato per far sapere a @halfer. Anni dopo hanno trovato il semplice bug, suppongo che non molte persone usino pgsql ... – Sam

+1

Nessun problema @Sam, ho riscontrato lo stesso problema da solo. Ho riscontrato alcuni fastidiosi trucchi con le migrazioni, ma è difficile sapere quanti sforzi mettere per offrire le correzioni di upstream. Sembra che ci siano un certo numero di PR in attesa almeno da aprile 2014, ma il precedente lead dev [intendeva unirli lentamente] (https://github.com/propelorm/Propel/issues/859#issuecomment-39421396) , per motivi di stabilità. – halfer

2

Nella ultima versione stabile di Propel (1.7.1) si è inpossible di aggiungere il seguente codice:

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

Conseguente il seguente errore:

Indirect modification of overloaded element of PropelConfiguration has no effect

Ecco perché, se si dispone di un solo adattatore, è possibile utilizzare:

/* 
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; 

Questo errore si verifica solo quando si utilizza ./propel-gen diff. Ancora molto strano. Spero che lo risolvano presto.