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日以上解決しようとしていて、少し迷っています。
ありがとう。