Ошибка Solr / Sunspot / Rails 3: неопределенный метод `closed? 'для ноля: NilClass - PullRequest
2 голосов
/ 02 ноября 2011

У меня есть эта модель:

class Book < Item
  validates :isbn, :presence => true, :uniqueness => true

  has_many  :book_chapters
  has_many  :chapters,  :through => :book_chapters

  searchable :auto_index => true, :auto_remove => true do
      text :title
  end
end

И тогда у меня есть этот контроллер:

class HomeController < ApplicationController
    def index

      @search = Book.search do
        fulltext params[:search]
      end
      @books = @search.results

      [... normal rest of code ...]
    end
end

Поле «заголовок» наследуется от более общей модели Item. И когда контроллер Home пытается выполнить поиск, я получаю эту ошибку:

NoMethodError в HomeController # index

неопределенный метод `closed? ' для ноля: NilClass

В журнале также есть это дополнительное предупреждение:

ПРЕДУПРЕЖДЕНИЕ ОБ УСТРОЙСТВЕ: class_inheritable_attribute устарела, вместо этого используйте метод class_attribute. Обратите внимание, что их поведение немного отличается, поэтому сначала обратитесь к документации class_attribute. (вызывается из /Users/xxx/Sites/zigzag/app/models/book.rb:7)

Что относится к строке:

searchable: auto_index => true,: auto_remove => true do

в book.rb

Есть идеи, почему я получаю эту ошибку? В других подобных сообщениях о переполнении стека кажется, что люди забыли включить сервер солнечных пятен. Но я бегу, и он работает нормально. Я могу хорошо ориентироваться в Solr Admin. Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 января 2013

Один простой ответ заключается в том, что вы, возможно, не запустили свой солнечной пятно. Попробуйте выполнить команду rake:

rake sunspot:solr:start
0 голосов
/ 03 ноября 2011

Я понял это.Я запускаю это приложение на Mac OS Lion 10.7.2.Проблема заключалась в том, что приложение rails действительно не было подключено к серверу солнечных пятен.Но причина не в том, что сервер солнечных пятен отсутствовал.Это было из-за того, что rails использовал адреса IPv4, в то время как пятно ожидало адреса IPv6.Первая часть исправления состояла в том, чтобы изменить конфигурационный файл sunspot.yml так, чтобы имя хоста было 127.0.0.1, а не «localhost».Затем в / etc / hosts закомментируйте следующие строки:

#::1            localhost 
#fe80::1%lo0    localhost

, чтобы localhost отображался только на 127.0.0.1 (что указано в другом месте в / etc / hosts /).Вот и все!

...