ThinkingSphinx3:如何防止搜索线程冻结?

时间:2013-04-27 20:26:00

标签: ruby-on-rails-3 sphinx thinking-sphinx

我正在使用Rails 3.2.12,RSpec-rails 2.13.0和ThinkingSphinx 3.0.10

问题:

当我运行bundle exec rpsec spec / controllers / ads_controller_spec.rb时,认为sphinx会产生3个被冻结的搜索进程,我的测试只会锁定,直到我手动杀死搜索进程,之后测试继续运行。

设置:

这是我的sphinx_env.rb文件,我在其中设置TS进行测试:

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搜索 流程。
  • 我的test.sphinx.pid中的pid总是只有一个searchd pid,它始终是第二个搜索进程pid。
  • 以下是test.searchd.log文件的输出:

    [568] binlog:以0.006秒完成重播总计49次

    [568]接受连接

    [568]捕获了SIGHUP(无效= 1,在队列中= 1)

    [568]旋转指数'ad_core':已启动

    [568]捕获了SIGHUP(无效= 1,在队列中= 2)

    [568]抓住了SIGTERM,关闭了

感谢任何帮助,我一直试图解决这个问题超过一天&有点失落。

感谢。

1 个答案:

答案 0 :(得分:1)

带有线程Sphinx工作者的Sphinx 2.0.x版本(这是Thinking Sphinx v3使用的,因此多个搜索进程)在OS X上有错误,但这在Sphinx 2.0.6中已得到修复(这是主要的事情之一)阻碍TS v3开发 - 由于你所看到的问题,我自己的测试无法运行。

我建议将Sphinx升级到2.0.6,我很确定应该解决这些问题。