2012-02-22 2 views
0

필자는 이해력이 Rails 3과 호환되는 Thinking Sphinx 2.0.10을 구현하려고 시도하고 있습니다. Ruby on Rails를 사용하여 프로그래밍 할 때 매우 익숙합니다. StackOverflow에 대한 기사를 많이 읽었지만 내 문제에 대한 해결책을 찾지 못했습니다.Rails를 사용하여 스핑크스를 생각할 때의 문제점 3.2.1

내 Gemfile에 require 매개 변수를 사용하지 않고 gem을 설치했습니다.

gem 'thinking-sphinx', '2.0.10' 

나는 내가 검색을 추가 할 목록을 표시하는 작업 레일 응용 프로그램이 있습니다.

내 모델 파일에서 색인을 정의하는 코드입니다.

define_index do 
    indexes :email, :sortable => true 
    indexes :name, :sortable => true 
    indexes microposts.content, :as => :micropost_content 
end 

다음은 컨트롤러 파일에있는 레일스 코드입니다. 주석 처리 된 행은 작동중인 원래 코드입니다. 나는 페이지 당 15 레코드에 대한 응용 프로그램 컨트롤러에서 생각하는 will_paginate에 대한 기본값이 있습니다.

def index 
    @users = User.search params[:search], :per_page => 15 
    # @users = User.paginate(page: params[:page]) 
end 

다음은 색인 페이지에 추가 한 검색 창입니다.

<p> 
    <%= text_field_tag :search, params[:search] %> 
    <%= submit_tag "Search", :name => nil %> 
</p> 

여기 내 rSpec 코드입니다. 이것은 Thinking Sphinx를 구현하기 전에 사용했던 원래 코드입니다.

Failure/Error: visit users_path 
    ActionView::Template::Error: 
     getaddrinfo: nodename nor servname provided, or not known 

페이지가 표시 잘 : 내 RSpec에 테스트를 실행하면

describe "index" do 
    let(:user) { FactoryGirl.create(:user) } 
    before(:each) do 
    sign_in user 
    visit users_path 
    end 
    it { should have_selector('title', text: 'All users') } 

    describe "pagination" do 
    before(:all) { 15.times { FactoryGirl.create(:user) } } 
    after(:all) { User.delete_all } 
    let(:first_page) { User.paginate(page: 1) } 
    let(:second_page) { User.paginate(page: 2) } 
    it { should have_link('Next') } 
    it { should have_link('2') } 
    it { should_not have_link('delete') } 
    it "should list each user" do 
     User.all[0..2].each do |user| 
     page.should have_selector('li', text: user.name) 
     end 
    end 

    it "should list the first page of users" do 
     first_page.each do |user| 
     page.should have_selector('li', text: user.name) 
     end 
    end 
    it "should not list the second page of users" do 
     second_page.each do |user| 
     page.should_not have_selector('li', text: user.name) 
     end 
    end 
    describe "as an admin user" do 
     let(:admin) { FactoryGirl.create(:admin) } 
     before do 
     sign_in admin 
     visit users_path 
     end 
     it { should have_link('delete', href: user_path(User.first)) } 
     it "should be able to delete another user" do 
     expect { click_link('delete') }.to change(User, :count).by(-1) 
     end 
     it { should_not have_link('delete', href: user_path(admin)) } 
    end 

    end 
end 

나는 다음과 같은 오류가 발생합니다. 검색 창에 텍스트를 입력하고 버튼을 클릭해도 아무런 변화가 없습니다. 이는 나에게 놀랄 일이 아닙니다.

터미널에서 스핑크스를 실행할 수 있습니다. 검색은 정상적으로 작동합니다. Thinking Sphinx에서이 문제를 디버깅하기에 충분하지 않습니다. 지난 며칠 동안이 웹 사이트 및 많은 다른 페이지에서 많은 페이지를 검색했지만 그 중 누구도이 문제를 다루지 않았습니다. 어떤 도움을 주시면 감사하겠습니다.

답변

0

스핑크스 데이터베이스를 초기화 했습니까? 이것은 자동으로 당신을 위해 rake ts:conf을 실행하고 인덱스를 다시 작성해야

rake ts:rebuild 

:

보통 그냥 같은 것을 할 필요가있다.

rake ts:in을 사용하여 인덱스를 업데이트 할 수도 있습니다.

이 방법이 작동하는지 테스트하는 간단한 방법은 레일 콘솔 (rails c)을 실행하고 수동으로 사용자 (User.search)를 검색하는 것입니다. 당신이 어떤 결과를 얻을 경우

이 인덱스를 사용할 수 있으며, 당신이 옆 뷰/컨트롤러 문제를 해결할 수 있습니다)

+0

막시무스,이 때문에 삶의 작업을 종료했다 :) 난 그냥 당신이 무엇을 제안했다. 사고 스핑크스는 기록을 잘 찾는다. 뷰/컨트롤러를 업데이트하는 방법을 알아야합니다. 도와 주셔서 감사합니다. –

+0

필자는 필자의 레일즈 애플리케이션에 PostgreSQL을 사용하고 있기 때문에 텍스트 검색을 위해 pg_search gem을 설치하기로 결정했습니다. 모든 것이 두건 아래에있다. 그것은 텍스트 검색을 위해 정말 잘 작동합니다. –