2013-06-18 3 views
10

개발 중 Propel 프로젝트에서 처음으로 마이그레이션을 사용하려고합니다 (따라서 15MB의 데이터를 다시 삽입 할 필요가 없습니다).하지만 몇 가지 어려움이 있습니다. 내 스키마에서 변경을 수행하고 propel-gen diff을 실행했습니다. 먼저 buildtime-conf.xml 파일을 찾을 수 없다는 오류가 발생했습니다. 나는 (아직 필요하지 않았기 때문에) 아직 만들지 않았지만 그 구조가 runtime-conf.xml과 같아야한다는 것을 읽었다. runtime-conf.xmlbuildtime-conf.xml에 복사했습니다. 이제 다음과 같은 오류가 나타납니다Propel PostgreSQL 마이그레이션 어댑터를 찾을 수 없습니다

[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"?> 
<database name="project" defaultIdMethod="native"> 
    <table schema="accounts" name="accounts" phpName="Account" package="accounts"> 
     <column /> 
    </table> 
</database> 

내가 변경 시도 :

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

내 스키마이의 라인을 따라입니다 buildtime-conf는 <datasource id="testing">이고 오류는 Unable to find adapter for datasource [testing]으로 변경되었습니다. 그래서 오류는 실제 buildtime-conf 파일 (스키마가 아님)에 있습니다. 아마 Propel이 PostgreSQL의 어댑터를 찾을 수 없을 것이라고 생각했기 때문에 (심지어 런타임의 conf에서 잘 작동한다고해도) 어댑터를 mysql으로 변경하려고 시도했습니다. 동일한 어댑터 오류를 찾을 수 없습니다.

나는 완전히 잃어버린 생각입니까?

업데이트 : 그래서 /Propel/runtime/lib/Propel.php에 들어가서 Unable to find adapter 예외가 발생한 행을 찾을 수있었습니다. 나는 self::$configuration['datasources'][$name]['adapter'] = 'pgsql' 라인을 추가하여 수동으로 변수를 정의하고 작동한다. 이 변경 사항을 재실행하지 않고 Propel을 업데이트 할 수 없으므로 분명히 지금은 유용하지 않습니다. 나는 self::$configuration을 Propel.php에 버렸고, 어떤 아이디어가 그 이유입니까? NULL입니다.

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

다음과 같은 오류가 발생합니다 :

Indirect modification of overloaded element of PropelConfiguration has no effect

의 추진의 최신 안정 버전에서

+0

실행중인 버전은 무엇입니까? 그것이 1.6 인 경우 afaik를 계속 지원합니다. 버그를 신고합니다. 마이그레이션 작업이 연결을 초기화하지 않는 것처럼 보입니다. 실제로 내부 구조에 대해서는 전혀 알지 못합니다. 또한 전체 schema.xml 및 build.properties를 압축하려면 원하는 경우 내 컴퓨터에서 마이 그 레이션을 시도합니다 (아직 시도하지는 않았지만 주위를 둘러보아야 함을 의미합니다). – halfer

답변

3

작성자 종속성을 dev-master으로 전환하는 것처럼 보입니다. 작성 당시 현재 릴리스 (1.7.1)와 마스터 사이에 20 commits difference이 있습니다. 마이그레이션 패치는 특히 is here입니다.

팀의 개발 노력이 현재 Propel2 (아직 알파 상태)에 집중 될 수 있지만, 1.7.2 릴리스가 예정대로 진행되기를 바랍니다.

+0

사람들에게 @halfer를 알리기 위해 다시 방문해 주셔서 감사합니다. 몇 년 후 그들은 간단한 버그를 발견, 많은 사람들이 pgsql을 사용하지 않는 것 같아요. – Sam

+1

probs @ Sam, 나도 같은 문제가 발생했습니다. 이전과 관련하여 몇 가지 불만을 겪었지만 업스트림 수정 제안에 어느 정도의 노력을 기울이는 지 알기가 어렵습니다. 적어도 2014 년 4 월 이후로 많은 PR이 기다리고 있지만 이전의 리드 개발자는 [천천히 병합하려고했습니다] (https://github.com/propelorm/Propel/issues/859#issuecomment-39421396) 안정성을 위해. – halfer

2

은 (1.7.1)은 다음과 같은 코드를 추가 inpossible입니다 왜 어댑터 하나만 있다면 다음과 같이 쓸 수 있습니다 :

/* 
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를 사용할 때만 발생합니다. 아직도 아주 이상합니다. 그들이 빨리 고쳐주기를 바란다.

관련 문제