2

Rails のテスト モードで Thinking Sphinx を動作させようとしています。基本的にこれ:

ThinkingSphinx::Test.init
ThinkingSphinx::Test.start

フリーズして二度と戻ってこない。

test と devel の構成は、test と devel で同じです。

dry_setting: &dry_setting
  adapter: mysql
  host: localhost
  encoding: utf8
  username: rails
  password: blahblah

development:
  <<: *dry_setting
  database: proj_devel
  socket: /tmp/mysql.sock  # sphinx requires it

test:
  <<: *dry_setting
  database: proj_test
  socket: /tmp/mysql.sock  # sphinx requires it

および sphinx.yml

development:
  enable_star: 1
  min_infix_len: 2
  bin_path: /opt/local/bin

test:
  enable_star: 1
  min_infix_len: 2
  bin_path: /opt/local/bin

production:
  enable_star: 1
  min_infix_len: 2

生成された構成ファイル config/development.sphinx.conf と config/test.sphinx.conf は、データベース名、ディレクトリ、および同様のもののみが異なります。何も機能しません。

devel のインデックスの生成は問題なく行われます

$ rake ts:in
(in /Users/pupeno/proj)
default config
Generating Configuration to /Users/pupeno/proj/config/development.sphinx.conf
Sphinx 0.9.8.1-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file '/Users/pupeno/proj/config/development.sphinx.conf'...
indexing index 'user_core'...
collected 7 docs, 0.0 MB
collected 0 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 0.0 Mhits, 99.8% done
total 7 docs, 422 bytes
total 0.098 sec, 4320.80 bytes/sec, 71.67 docs/sec
indexing index 'user_delta'...
collected 0 docs, 0.0 MB
collected 0 attr values
sorted 0.0 Mvalues, nan% done
total 0 docs, 0 bytes
total 0.010 sec, 0.00 bytes/sec, 0.00 docs/sec
distributed index 'user' can not be directly indexed; skipping.

しかし、テストのためにそれを実行しようとすると、フリーズします:

$ RAILS_ENV=test rake ts:in
(in /Users/pupeno/proj)
DEPRECATION WARNING: require "activeresource" is deprecated and will be removed in Rails 3. Use require "active_resource" instead.. (called from /Users/pupeno/.rvm/gems/ruby-1.8.7-p249/gems/activeresource-2.3.5/lib/activeresource.rb:2)
default config
Generating Configuration to /Users/pupeno/proj/config/test.sphinx.conf
Sphinx 0.9.8.1-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file '/Users/pupeno/proj/config/test.sphinx.conf'...
indexing index 'user_core'...

10 分以上そこにあり、ユーザー テーブルには 4 つのレコードがあります。

データベース ディレクトリはかなり異なって見えますが、どうすればよいかわかりません。

$ ls -l db/sphinx/development/
total 96
-rw-r--r--  1 pupeno  staff   196 Mar 11 18:10 user_core.spa
-rw-r--r--  1 pupeno  staff  4982 Mar 11 18:10 user_core.spd
-rw-r--r--  1 pupeno  staff   417 Mar 11 18:10 user_core.sph
-rw-r--r--  1 pupeno  staff  3067 Mar 11 18:10 user_core.spi
-rw-r--r--  1 pupeno  staff    84 Mar 11 18:10 user_core.spm
-rw-r--r--  1 pupeno  staff  6832 Mar 11 18:10 user_core.spp
-rw-r--r--  1 pupeno  staff     0 Mar 11 18:10 user_delta.spa
-rw-r--r--  1 pupeno  staff     1 Mar 11 18:10 user_delta.spd
-rw-r--r--  1 pupeno  staff   417 Mar 11 18:10 user_delta.sph
-rw-r--r--  1 pupeno  staff     1 Mar 11 18:10 user_delta.spi
-rw-r--r--  1 pupeno  staff     0 Mar 11 18:10 user_delta.spm
-rw-r--r--  1 pupeno  staff     1 Mar 11 18:10 user_delta.spp

$ ls -l db/sphinx/test/       
total 0
-rw-r--r--  1 pupeno  staff  0 Mar 11 18:11 user_core.spl
-rw-r--r--  1 pupeno  staff  0 Mar 11 18:11 user_core.tmp0
-rw-r--r--  1 pupeno  staff  0 Mar 11 18:11 user_core.tmp1
-rw-r--r--  1 pupeno  staff  0 Mar 11 18:11 user_core.tmp2
-rw-r--r--  1 pupeno  staff  0 Mar 11 18:11 user_core.tmp7

これが発生した場合、ログには何も追加されません。ここからどこへ行くべきか?

コマンドラインを手動で実行できます:

/opt/local/bin/indexer --config config/test.sphinx.conf --all

これは出力をrake ts:inとして生成するため、何の助けにもなりません。

4

1 に答える 1

2

問題は、フィクスチャによって生成されたランダムIDでした。解決策はhttp://freelancing-god.github.com/ts/en/common_issues.html#slow_indexingで説明されています

遅いインデックス作成

Sphinxがすべてのレコードを処理するのに時間がかかる場合、これが発生する一般的な理由がいくつかあります。まず、外部キー列と、フィルタリングまたは並べ替える列にデータベースインデックスがあることを確認します。

第二に、フィクスチャを使用していますか?Railsのフィクスチャにはランダムに生成されたIDがあり、これは通常非常に大きな整数であり、Sphinxはデフォルトで異種IDを効率的に処理するように設定されていません。これを回避するには、適切な環境のconfig/sphinx.ymlファイルでsql_range_stepを設定する必要があります。

development:
  sql_range_step: 10000000

開発環境とテスト環境の両方に追加しました。

于 2010-03-12T09:06:10.790 に答える