2013-05-12 57 views
1

生成错误:思考狮身人面像不产生结果

undefined method `inject' for nil:NilClass

尽管在讨论: https://github.com/pat/thinking-sphinx/issues/408#issuecomment-12593562 看来我有MySQL的和狮身人面像正确安装我的基于postgre的应用

MacBook-Pro-di-jerdvo:saim jerdvo$ brew install sphinx --mysql
Error: sphinx-2.0.3 already installed
MacBook-Pro-di-jerdvo:saim jerdvo$ brew install mysql
Error: mysql-5.5.20 already installed

gemfile包含

gem 'rails', '3.2.13'
gem 'pg', '0.14.1'
gem 'mysql2', '0.3.12b5'
gem 'thinking-sphinx', '3.0.3'

搜索参数被抓获

{"utf8"=>"✓", "staticpage_search"=>{"terms"=>"Messina"}}

搜索模型运行代码

def search(options = {}) 
    extra_conditions = options.delete(:conditions) || {} 
    order = options.delete(:order) || '@weight DESC' 
    extra_with = options.delete(:with) || {} 

    with = search_with.merge(extra_with) 
    conditions = search_conditions.merge(extra_conditions) 

    base_class.search sanitized_terms, :conditions => conditions, :with => with, :page => page, :per_page => per_page, :sort_mode => :extended, :order => order, :retry_stale => true, :match_mode => :extended 
    end 

    def sanitized_terms 
    @terms ||= "" 
    sanitize(@terms) 
    end 

    def sanitize(s) 
    if s.respond_to? :gsub 
     s.gsub("/", "\\/") 
    else 
     s 
    end 
    end 

回答

0

有两点需要注意:

  • 你需要狮身人面像2.0.6或更高版本的在MacOS TS V3 X(由于之前的Sphinx版本中只有OS X上的线程守护进程存在缺陷)。
  • 您需要用MySQL支持编译的Sphinx。在系统上同时使用MySQL和Sphinx并不能保证 - 检查的最好方法是使用MySQL作为你的应用数据库(只是暂时的 - 我更喜欢PostgreSQL),检查Sphinx的索引是否正确,然后你可以确保编译MySQL支持。也就是说,当你更新到2.0.6或更新版本(可能需要更新你的brew配方)时,如果情况并非如此,我会感到惊讶。
+0

这一思路是我基于其他讨论的怀疑之一。但我有点不确定。 Wiki的自制软件从不提及配方;我担心我会大失所望。 – Jerome 2013-05-12 18:12:15

+0

此外,可能有手动下载和编译的选项(不知道如何与brew结婚)。哪个二进制然后为OS X 10.6? 2.0.6没有OS x库包 - 7和8。或者tarball是合适的?
感谢您的及时性BTW非常感谢。 – Jerome 2013-05-12 18:22:27

+0

如果您正在编译自己,请获取tarball。最新的Homebrew有Sphinx 2.0.7,它应该可以正常工作:https://github.com/mxcl/homebrew/blob/master/Library/Formula/sphinx.rb – pat 2013-05-12 21:44:10

0

更新狮身人面像是必需的。然而,还需要以下获得索引执行:

brew uninstall sphinx 
gem uninstall mysql2 
gem uninstall thinking-sphinx 
brew upgrade sphinx 
brew install sphinx --mysql --pgsql 

然后再重新安装mysql2和思考 - 狮身人面像......

注1: 依赖可能是一个问题。 mysql2需要0.3.12b4最小和PG需要0.15.1

gem 'mysql2', '0.3.11' 
gem 'pg', '0.14.1' 

注2:

brew update 

也可以产生错误。在升级,下载或其他任何方面(系统在mysql初始安装之后从未被触摸过)中从未要求5.6.10。我的结论是:brew很混乱,并且安装了更新的版本。针对mysql服务器调整的database.yml是Unstartable。测试mysql支持是无法验证的。

​​

运行mySQL。此时,gem被编译为错误的早期版本。

gem uninstall mysql2 

我选择删除所有版本。

bundle install 
rake db:create:all 
rake db:migrate 

创建并同步了MySQL数据库

rake ts:configure 
rake ts:index 

两个跑了。