我正在使用 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,正在关闭
感谢您提供任何帮助,我已经尝试解决这个问题超过一天并且有点迷失。
谢谢。