2013-06-18 6 views
10

開発中のPropelプロジェクトで初めてマイグレーションを使用しようとしています(したがって、15MBのデータを再挿入する必要はありません)。スキーマを変更してpropel-gen diffを実行しました。最初に私のbuildtime-conf.xmlファイルを見つけることができなかったというエラーを受けました。私はまだ(まだ必要ではなかったので)1つも作っていませんでしたが、その構造は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"?> 
<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です。

+0

実行しているバージョンは何ですか?それが1.6の場合、それはafaikをサポートしています - 私はバグを報告します。マイグレーションのものは接続を初期化していないようですが、内部のことはまったくわかりません。また、完全なschema.xmlとbuild.propertiesを解凍したい場合は、好きなだけ自分のマシンでマイグレーションを試みます(まだ試していませんが、それを回避する意味があります)。 – halfer

答えて

3

Composerの依存関係を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

Propelの(1.7.1)の最新の安定版では、次のコードを追加することinpossibleで次のエラーが発生し

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

を:

Indirect modification of overloaded element of PropelConfiguration has no effect

ていますなぜなら、アダプタが1つしかない場合は、次のように使用できます。

/* 
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を使用している場合にのみ発生します。まだ非常に奇妙です。彼らはすぐにそれを修正することを望む。

関連する問題