解決した
非常に疲れているときに働くことは、ぐっすり眠った後に働くことと同じではないようです。問題は、prod.dev.index 内のファイルにありました。彼らは行方不明でした。私はそれらを再作成しましたが、うまくいきました。
doctrine と Zend Lucene Search が統合された symfony 1.4 を使用しています。Jobeetチュートリアルに従って最初にインストールしたときは、完璧に機能していました。プロジェクトをsvn経由で別のサーバーにアップロードしましたが、まったく機能しません。現在、私のローカルホストでも機能していません。
キャッシュまたはインデックスに関連するものに違いないと思いますが、ここで誰か助けてもらえますか? 私は立ち往生しています。
アップデート
申し訳ありませんが、これ以上の情報を提供しませんでした。夜遅くだったので、とても疲れていたと思います。
権限は問題ありません。ファイルはコミット後にサーバーにあり、すべて問題ないようです。今、新しいアイテムを追加したいときにエラーが発生することに気付きました:
500 | 内部サーバー エラー | Zend_Search_Lucene_Exception インデックスが指定されたディレクトリに存在しません。
私の data/ フォルダーには、前に lucene によって作成された podcast.dev.index および podcast.prod.index フォルダーがあります。
私の PodcastTable.class.php ファイルのコードは次のとおりです。
public static function getLuceneIndex() {
ProjectConfiguration::registerZend();
if (file_exists($index = PodcastTable::getLuceneIndexFile())) {
return Zend_Search_Lucene::open($index);
} else {
return Zend_Search_Lucene::create($index);
}
}
public static function getLuceneIndexFile() {
return sfConfig::get('sf_data_dir') . '/podcast.' . sfConfig::get('sf_environment') . '.index';
}
public function getForLuceneQuery($query, $execute = true) {
$hits = self::getLuceneIndex()->find($query);
$pks = array();
foreach ($hits as $hit) {
$pks[] = $hit->pk;
}
if (empty($pks)) {
return array();
}
$q = $this->createQuery('p')
->where('p.is_published = 1')
->andWhereIn('p.podcast_id', $pks)
//->limit(Doctrine_Core::getTable('Configuracion')->getPodcastsPerPage())
->orderBy('p.podcast_id desc');
if (!$execute){
return $q;
}
return $q->execute();
}
そして Podcast.class.php ファイルで:
public function save(Doctrine_Connection $conn = null) {
// ...
$ret = parent::save($conn);
$this->updateLuceneIndex();
return $ret;
}
public function delete(Doctrine_Connection $conn = null) {
$index = PodcastTable::getLuceneIndex();
if ($hit = $index->find('pk:' . $this->getPodcastId())) {
$index->delete($hit->id);
}
return parent::delete($conn);
}
public function updateLuceneIndex() {
$index = PodcastTable::getLuceneIndex();
// remove an existing entry
if ($hit = $index->find('pk:' . $this->getPodcastId())) {
$index->delete($hit->podcastId);
}
$isActive = $this->getIsPublished();
// don't index expired and non-activated jobs
if (!$isActive) {
return;
}
$doc = new Zend_Search_Lucene_Document();
// store job primary key URL to identify it in the search results
$doc->addField(Zend_Search_Lucene_Field::UnIndexed('pk', $this->getPodcastId()));
// index job fields
$doc->addField(Zend_Search_Lucene_Field::UnStored('name', $this->getPodcastName(), 'utf-8'));
$doc->addField(Zend_Search_Lucene_Field::UnStored('description', $this->getPodcastDescription(), 'utf-8'));
$doc->addField(Zend_Search_Lucene_Field::UnStored('image', $this->getImagePath(), 'utf-8'));
// add job to the index
$index->addDocument($doc);
$index->commit();
}
以前は機能していましたが、現在は機能していません。