Solr / Sunspot / Rails 3错误:未定义的方法`关闭?'为零:NilClass

时间:2011-11-02 18:39:40

标签: ruby-on-rails-3 solr sunspot

我有这个型号:

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模型。当Home控制器尝试执行搜索时,我收到此错误:

  

HomeController中的NoMethodError #index

     

未定义的方法`关闭?'为零:NilClass

日志中还有这个附加警告:

  

DEPRECATION WARNING:不推荐使用class_inheritable_attribute,请改用class_attribute方法。请注意它们的行为略有不同,因此请首先参阅class_attribute文档。 (来自/Users/xxx/Sites/zigzag/app/models/book.rb:7)

指的是这一行:

  

可搜索:auto_index =&gt; true,:auto_remove =&gt;是的

在book.rb中

为什么我收到此错误的任何想法?在堆栈溢出的其他类似帖子中,似乎人们忘了打开太阳黑子服务器。但我正在运行它,它运行正常。我可以很好地导航Solr Admin。谢谢!

2 个答案:

答案 0 :(得分:0)

我明白了。我在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 /中的其他地方指定)。就是这样!

答案 1 :(得分:0)

一个简单的答案是你可能没有开始你的太阳黑子索尔。尝试运行此rake命令:

rake sunspot:solr:start