2013-06-18 17 views
10

Próbuję użyć migracji po raz pierwszy w rozwijanym projekcie Propela (więc nie muszę ponownie wstawiać 15 MB danych), ale mam pewne trudności. Wprowadziłem zmiany w moim schemacie i uruchomiłem propel-gen diff. Po raz pierwszy otrzymałem komunikat o błędzie, że nie mógł zlokalizować pliku buildtime-conf.xml. Jeszcze go nie stworzyłem (ponieważ nie było to konieczne), ale przeczytaj, że struktura powinna być taka sama jak w przypadku modelu runtime-conf.xml. Skopiowałem runtime-conf.xml do buildtime-conf.xml. I teraz pojawia się następujący błąd:Propel PostgreSQL Migracja nie jest w stanie znaleźć adaptera

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

Moi uruchomieniowe i buildtime pliki wyglądać następująco:

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

Mój schemat jest wzdłuż linii to:

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

Próbuję zmienić buildtime-conf na <datasource id="testing">, a błąd został zmieniony na Unable to find adapter for datasource [testing]. Zatem błąd leży w rzeczywistym pliku buildtime-conf (nie schemacie), o ile wiem. Pomyślałem, że Propel nie może znaleźć adaptera PostgreSQL (nawet jeśli działa dobrze w moim runtime-conf), więc próbowałem zmienić mój adapter na mysql. Wyszło z tym samym nie może znaleźć błąd adaptera.

Jestem kompletnie zagubiony, myśli?

Aktualizacja: więc byłem w stanie iść do /Propel/runtime/lib/Propel.php i znajdź linię, gdzie został rzucony wyjątek Unable to find adapter. Ręcznie zdefiniowałem zmienną, dodając wiersz self::$configuration['datasources'][$name]['adapter'] = 'pgsql' i to działa. To oczywiście nie jest obecnie przydatne, ponieważ nie będę w stanie zaktualizować Propela bez ponownej zmiany tej zmiany. Zrzuciłem self::$configuration w Propel.php i jest NULL, wszelkie pomysły, dlaczego?

+0

Jaką wersję masz uruchomioną? Jeśli jest 1.6, to nadal jest wsparcie afaik - zgłosiłem błąd. Wygląda na to, że migracje nie inicjują połączenia, chociaż w rzeczywistości nie znam ich w ogóle. Ponadto jeśli chcesz skompresować pełny plik schema.xml i build.properties, spróbuję przeprowadzić migrację na moim komputerze, jeśli chcesz (nie wypróbowałeś ich jeszcze, ale zachowaj sens, aby się do niego dostać!). – halfer

Odpowiedz

3

Wygląda na to, że przełączenie zależności Composer na dev-master naprawia to - między bieżącym wydaniem (1.7.1) a wzorcem w chwili pisania jest . Łatka migracji specyficznie is here.

Mam nadzieję, że w odpowiednim czasie zostanie wydane wydanie w wersji 1.7.2, choć należy zauważyć, że wysiłki na rzecz rozwoju zespołu będą prawdopodobnie koncentrować się obecnie na Propel2 (wciąż w wersji alfa).

+0

Niesamowite, dobre znalezisko i podziękowania za to, że wróciliście, aby ludzie mogli poznać @halfer. Lata później i znaleźli prosty błąd, zgadnij, że niewielu ludzi używa pgsql ... – Sam

+1

Żadnych problemów @Sam, sam napotkałem ten sam problem. Napotkałem kilka frustrujących zgiełk z migracjami, ale trudno jest się dowiedzieć, ile wysiłku włożylibyśmy w oferowanie poprawek na wyższy poziom. Wygląda na to, że od co najmniej kwietnia 2014 r. Oczekuje się wielu PRów, ale poprzedni główny programista [miał ochotę połączyć je powoli] (https://github.com/propelorm/Propel/issues/859#issuecomment-39421396) ze względu na stabilność. – halfer

2

W najnowszej stabilnej wersji Propelu (1.7.1) jest inpossible aby dodać następujący kod:

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

Powstałe w następujący błąd:

Indirect modification of overloaded element of PropelConfiguration has no effect

to dlaczego, jeśli masz tylko jeden adapter, możesz użyć:

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

Ten błąd występuje tylko podczas korzystania z ./propel-gen diff. Wciąż bardzo dziwne. Mam nadzieję, że wkrótce to naprawią.

Powiązane problemy