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 进程,之后测试继续运行。

设置:

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

    [568] binlog:在 0.006 秒内完成重播总共 49

    [568]接受连接

    [568] 捕捉到 SIGHUP(无缝=1,在队列中=1)

    [568]旋转索引“ad_core”:开始

    [568] 捕捉到 SIGHUP(无缝=1,在队列中=2)

    [568] 捕捉到 SIGTERM,正在关闭

感谢您提供任何帮助,我已经尝试解决这个问题超过一天并且有点迷失。

谢谢。

4

1 回答 1

1

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

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

于 2013-04-28T17:59:07.860 回答