Ошибка Solr/Sunspot/Rails 3: неопределенный метод «закрыт?» для нуля: NilClass

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

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

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

NoMethodError в HomeController#index

неопределенный метод `закрыт?' для нуля: NilClass

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

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

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

доступен для поиска :auto_index => true, :auto_remove => true сделать

в книге.рб

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


person landslide    schedule 02.11.2011    source источник
comment
Не похоже, что вы делаете что-то не так, это лучше всего подходит как отчет об ошибке для Sunspot. Попробуйте их список рассылки: groups.google.com/group/ruby-sunspot — вы также следует попытаться получить более полную трассировку стека для ошибки undefined method closed?. Наконец, попробуйте обновить исходный код в git до последней версии, чтобы узнать, исправлена ​​ли ошибка с тех пор.   -  person Nick Zadrozny    schedule 03.11.2011


Ответы (2)


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

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

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

person landslide    schedule 03.11.2011
comment
Откройте Терминал и введите cd /etc/hosts - person landslide; 27.11.2011

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

rake sunspot:solr:start
person Neal    schedule 11.01.2013