Проблемы использования Thinking Sphinx с Rails 3.2.1 - PullRequest
0 голосов
/ 23 февраля 2012

Я пытаюсь реализовать Thinking Sphinx 2.0.10, который, насколько я понимаю, совместим с Rails 3. Я очень новичок в программировании с использованием Ruby on Rails. Я прочитал довольно много статей о StackOverflow, но не смог найти решение своей проблемы.

Я установил гем без использования параметра: require в моем Gemfile.

gem 'thinking-sphinx', '2.0.10'

У меня есть работающее приложение Rails, которое отображает список, к которому я хотел бы добавить поиск.

Вот мой код для определения индексов в моем файле модели.

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

Вот код Rails в моем файле контроллера. Закомментированная строка - это оригинальный код, который работает. У меня есть значение по умолчанию для will_paginate, я думаю, в контроллере приложения для 15 записей на страницу.

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.

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

Когда я запускаю тест rSpec, я получаю следующую ошибку:

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

Страница отображается очень хорошо. Когда я ввожу текст в поле поиска и нажимаю кнопку, ничего не происходит, что меня не удивляет.

Я могу запустить Sphinx на терминале. Поиски работают нормально. Я просто не знаю достаточно, чтобы решить эту проблему с Thinking Sphinx. Я искал много страниц на этом сайте и многие другие в последние несколько дней, но ни одна из них не занималась этой проблемой. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 29 февраля 2012

Вы инициализировали базу данных sphinx?

Обычно вам просто нужно сделать что-то вроде:

rake ts:rebuild

Это должно автоматически запустить rake ts:conf для вас и перестроить ваши индексы.

Вы также можете использовать rake ts:in для обновления индексов.

Простой способ проверить, работает ли это, - запустить консоль rails (rails c) и попробовать поискать пользователей вручную (User.search).

Если вы получите какие-либо результаты, индексы будут доступны, и вы сможете устранить неполадки с вашими представлениями / контроллерами;)

...