0

Rails 3.2.12、RSpec-rails 2.13.0、および ThinkingSphinx 3.0.10 を使用しています。

問題:

bundle exec rpsec spec/controllers/ads_controller_spec.rb を実行すると、sphinx が 3 つの searchd プロセスを生成してフリーズすると考えて、searchd プロセスを手動で kill するまでテストがロックアップした後、テストが実行され続けます。

セットアップ:

テスト用にTSをセットアップしたsphinx_env.rbファイルは次のとおりです。

require 'thinking_sphinx/test'

def sphinx_environment(*tables, &block)
  obj = self
  begin
    before(:all) do
      obj.use_transactional_fixtures = false
      ThinkingSphinx::Test.init
      ThinkingSphinx::Test.start
      sleep(0.5)
    end

    yield
  ensure
    after(:all) do
      ThinkingSphinx::Test.stop
      sleep(0.5)
      obj.use_transactional_fixtures = true
    end
  end
end

ここに私のテストスクリプトがあります:

describe "GET index" do
  before(:each) do
    @web_origin   = FactoryGirl.create(:origin)
    @api_origin   = FactoryGirl.create(:api_origin)
    @first_ad     = FactoryGirl.create(:ad, :origin_id => @web_origin.id)

    ThinkingSphinx::Test.index #index ads created above
    sleep 0.5
  end

  sphinx_environment :ads do 
    it 'should return a collection of all live ads' do
      get :index, {:format => 'json'}
      response.code.should == '200'
    end 
  end
...

アップデート

進展はありませんが、追加の詳細を以下に示します。

  • テストを実行すると、sphinx は常に 3 つの searchd プロセスを開始すると考えています。
  • 私の test.sphinx.pid の pid には常に、検索された pid の 1 つだけがあり、常に 2 番目に検索されたプロセス pid です。
  • 私のtest.searchd.logファイルからの出力は次のとおりです。

    [ 568] binlog: 合計 49 件の再生を 0.006 秒で終了

    [ 568] 接続を受け入れる

    [ 568] SIGHUP をキャッチ (シームレス = 1、キュー内 = 1)

    [ 568] ローテーション インデックス 'ad_core': 開始しました

    [ 568] SIGHUP をキャッチ (シームレス = 1、キュー内 = 2)

    [ 568] SIGTERM をキャッチし、シャットダウンしました

私はこの問題を1日以上解決しようとしていて、少し迷っています。

ありがとう。

4

1 に答える 1

1

スレッド化された Sphinx ワーカー (Thinking Sphinx v3 が使用しているため、複数の searchd プロセスが使用される) を備えた Sphinx 2.0.x リリースは、OS X でバグがありますが、これは Sphinx 2.0.6 で修正されました (これは TS を妨げている主な原因の 1 つでした) v3 開発 - あなたが見てきたような問題のために、私自身のテストは実行されませんでした)。

Sphinx を 2.0.6 にアップグレードすることをお勧めします。これでこれらの問題が解決されるはずです。

于 2013-04-28T17:59:07.860 に答える