symfony1.2でDoctrine1.1使ってJobeetチュートリアル17日目

data/job.dev.indexの中身は、ころころ変わるので

svn propedit svn:ignore data

で、

*.*.index

と書き込んで保存。
検索のインデックスフォルダ(job.dev.indexって書くより、*使ってあいまい指定が便利)をsubversionの管理外にするといいんじゃないかと
ちゃんと管理外になってるかな?って時は、

svn st --no-ignore

すれば、管理外のやつらは頭に"I"が付いてます。


Luceneはpluginなのね

yum install php-ZendFramework-Search-Lucene

Searching

$ php symfony doctrine:data-load --env=dev

中略

Warning: Zend_Loader::include_once(parent.php): failed to open stream: No such file or directory in /usr/share/php/Zend/Loader.php on line 83

Call Stack:
    0.0000      50804   1. {main}() /usr/bin/symfony:0
    0.0000     264888   2. include('/usr/share/pear/symfony/command/cli.php') /usr/bin/symfony:37
    0.2100    3614504   3. sfSymfonyCommandApplication->run() /usr/share/pear/symfony/command/cli.php:20
    0.2300    3797824   4. sfTask->runFromCLI() /usr/share/pear/symfony/command/sfSymfonyCommandApplication.class.php:72
    0.2300    3797824   5. sfBaseTask->doRun() /usr/share/pear/symfony/task/sfTask.class.php:75
    3.3600    6196640   6. sfDoctrineLoadDataTask->execute() /usr/share/pear/symfony/task/sfBaseTask.class.php:62
    3.4500    6983060   7. sfDoctrineBaseTask->callDoctrineCli() /home/takitake/sfprojects/jobeet/plugins/sfDoctrinePlugin/lib/task/sfDoctrineDataLoadTask.class.php:87
    3.5100    7392944   8. Doctrine_Cli->run() /home/takitake/sfprojects/jobeet/plugins/sfDoctrinePlugin/lib/task/sfDoctrineBaseTask.class.php:104
    3.5100    7392944   9. Doctrine_Cli->_run() /home/takitake/sfprojects/jobeet/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Cli.php:91
    3.5200    7600204  10. Doctrine_Task_LoadData->execute() /home/takitake/sfprojects/jobeet/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Cli.php:152
    4.1600   10701312  11. Doctrine::loadData() /home/takitake/sfprojects/jobeet/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Task/LoadData.php:43
    4.1600   10727960  12. Doctrine_Data->importData() /home/takitake/sfprojects/jobeet/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine.php:849
    4.1700   10822180  13. Doctrine_Data_Import->doImport() /home/takitake/sfprojects/jobeet/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Data.php:222
    4.6400   12768132  14. Doctrine_Data_Import->_loadData() /home/takitake/sfprojects/jobeet/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Data/Import.php:113
   22.6500   17875004  15. JobeetJob->save() /home/takitake/sfprojects/jobeet/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Data/Import.php:291
   22.7400   17875372  16. JobeetJob->updateLuceneIndex() /home/takitake/sfprojects/jobeet/lib/model/doctrine/JobeetJob.class.php:32
   22.9800   17980012  17. JobeetJob->getCompany() /home/takitake/sfprojects/jobeet/lib/model/doctrine/JobeetJob.class.php:68
   22.9800   17980216  18. sfDoctrineRecord->__call() /home/takitake/sfprojects/jobeet/plugins/sfDoctrinePlugin/lib/record/sfDoctrineRecord.class.php:0
   22.9800   17981388  19. call_user_func_array() /home/takitake/sfprojects/jobeet/plugins/sfDoctrinePlugin/lib/record/sfDoctrineRecord.class.php:185
   22.9800   17981748  20. Zend_Loader::autoload() /usr/share/php/Zend/Loader.php:0
   22.9800   17981748  21. Zend_Loader::loadClass() /usr/share/php/Zend/Loader.php:186

わぉ、大惨事。
データの投入自体は成功してるみたい。


フォーラムに同様の症状の人発見。
http://www.symfony-project.org/forum/index.php/m/68657/
肝心の回答はまだ無し。

// lib/model/doctrine/JobeetJob.class.php

public function save(Doctrine_Connection $conn = null)
{

//...

$ret = parent::save($conn);

parent::saveに反応してる気がする。
Zend_Loader
 「parentクラスのsaveメソッドが呼ばれてる!」
 「parent.phpを探すぜ」
 「(´・ω・`)ナカッタヨ」


16日目のとこで書いてあるように、autoload.ymlでZendの場所定義して、symfonyのautoloadに読み込み任せたらエラー消えた。

  • autoload.ymlで/usr/share/php/Zend/へパス通す(sfConfig::get('sf_lib_dir').'/vendor/Zendでも可)
  • ProjectConfiguration::registerZend();をコメントアウト

あくまで応急処置ですよ。

Unit Tests

テスト回数も更新しとく

<?php
// test/unit/model/JobeetJobTest.php


$t = new lime_test(7, new lime_output_color());

Tasks

Propel式をDctrine式に訂正

<?php
// lib/task/JobeetCleanupTask.class.php


    // Remove stale jobs
    // $nb = JobeetJobPeer::cleanup($options['days']);
    $nb = Doctrine::getTable('JobeetJob')->cleanup($options['days']);