`
blogkid
  • 浏览: 7633 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

深入探索:Windows+Rails+Sphinx进行中文全文检索

阅读更多

原发 blogkid.cn

 

先说点题外话,以后大家买独立服务器的时候,还是买linux的吧。如今这么活跃的开源社区为linux贡献了好多柴火,而相应的软件在windows实在发展得缓慢。要是我当初买了linux服务器,以前和现在都能少许多烦恼,今天的“深入探索”,根本就用不着。

事情是这样的,我手头的一个项目里,打算用rmmseg+ferret+acts_as_ferret搭配起来做全文检索。一直也相安无事,直到我 今天决定放到生产环境试试看。这一试不要紧,发现DRB服务器启动不起来,提示的是”fork() funtion is unimplemented on this machine”。windows上哪里有fork啊,我顿时欲哭无泪。如果不用DRB的话,就也不能用acts_as_ferret了(原因请看 robbin的这个帖子 )。

恩,这时我并没有灰心,因为我在前几天看到了另一个解决方案 ,用的是sphinx,狮身人面。其中有windows版本的安装:

在Windows上安装
在Windows上为Sphinx打补丁、编译、连接libmmseg要比在Linux上做这些事情麻烦得多,而且大多数Windows上的开发人员都没有自己编译开源软件的习惯,幸好李沫南已经做了一个安装包:
http://www.coreseek.com/ft/csft_setup_2.5.1.exe
执行这个安装包即可安装Coreseek的Windows版,假设将Coreseek安装在D:\CsFullText25
将D:\CsFullText25\bin加入到环境变量PATH中,以便以后在命令行能够找到Sphinx提供的各种工具。

安装Ultrasphinx
Sphinx在Linux和Windows上都已经安装好了,我们可以通过一个Rails程序来做一下测试。
假设我们原先有一个Rails应用thought_log
cd thought_log
ruby script/plugin install -x svn://rubyforge.org/var/svn/fauna/ultrasphinx/trunk
若这个Rails应用尚未提交到SVN中,或者使用其他版本管理工具,则使用
ruby script/plugin install svn://rubyforge.org/var/svn/fauna/ultrasphinx/trunk
注意,执行这条命令前需要先安装好SVN for Windows(不是TortoiseSVN)。

当我按部就班执行到红色的那一步,命令行里提示我该svn不存在。我直接打开,也是404错误。这个最重要的rails插件,在我要安装的时候,居然消失了。

百般无奈,只好放一放,出去打个电话。电话回来,突然有了灵感,尝试用”gem install ultrasphinx”,居然安装成功了,不过是作为gem。没关系,我跑到gems目录下,找到ultrasphinx的文件夹,整个复制到 rails项目的vendor下面,同时把文件夹改名为ultrasphinx。

果然,gem安装的ultrasphinx就是那个消失的rails插件,不晓得为啥从插件变身gem了。但是探索还没有结束:

为了在Windows上正常使用Ultrasphinx,需要为Ultrasphinx打一点补丁:
修改vendor/plugins/ultrasphinx/tasks/ultrasphinx.rake

在文件最后加入:
def os_path path
if RUBY_PLATFORM =~ /mswin32/
path.gsub!(’/', ‘\\’)
end
path
end

然后将其中的:
“searchd –config ‘#{Ultrasphinx::CONF_PATH}’”
改为:
“searchd –config \”#{os_path(Ultrasphinx::CONF_PATH)}\”"

这样修改的原因是类似以下的写法:
searchd –config ‘D:/WORK/thought_log/config/ultrasphinx/development.conf’
在Windows上是无法正常运行的,必须改为:
searchd –config “D:\WORK\thought_log\config\ultrasphinx\development.conf”

除了例子中对searchd的调用,在ultrasphinx.rake文件中所有执行命令行调用的地方都需要做这样的修改。

看出来了吧,需要这么打补丁,是因为人家ultrasphinx根本就是为linux做的。想在windows上跑起来,要做的远远不止这些。

经过我的不断尝试,发现在ultraphinx.rake中,所有涉及到system调用的,全部需要重写。使用”kill -9 #{XXXpid}”的地方,我都改成了”task /f /im searchd.exe”,这样可以确保在使用”rake ultrasphinx:daemon:stop”时能杀掉伺服的进程。但是另一个函数”ultrasphinx_daemon_running?”是通 过linux的ps命令查看进程是否存活,我不知道怎么修改,就干脆屏蔽了它,不知道会不会带来别的后果。

在经历大量修改之后,运行”rake ultrasphinx:index”终于可以正常地生成索引了,速度那叫一个快。

运行”rake ultrasphinx:daemon:start”也可以正常启动伺服器,Oh Yeah!

sphinx+ultrasphinx+libmmseg终于可以正常工作了。我把自己修改之后的ultrasphinx在GoogleCode开了一个project,如果大家需要,可以在http://code.google.com/p/ultrasphinx-win32/ 获得,配合这篇文章 ,相信,可以让你少走很多弯路。

3
2
分享到:
评论
3 楼 robbin 2008-09-27  
跑RoR,作者何苦用Windows呢
2 楼 blogkid 2008-08-26  
恩,按照那里的做下来
还是会有点问题,为windows做的修改,并不完整
1 楼 Readonly 2008-08-26  
dlee写过一篇在安装Sphinx的文章,包括windows:
http://www.iteye.com/topic/200065

相关推荐

    级别1:DevOps级别1:Azure + Rails + Ember + CosmosDB

    级别1:部署Azure Rails和Ember Todo应用程序这是有关随着DevOps成熟度的提高在Azure上部署Rails应用程序的博客系列的一部分。 请参阅:todo:add_link 该Todo应用程序运行的余烬前端取决于Rails后端。 它说明了...

    webpackrails-example:Webpack + Rails +React

    这个例子展示了如何使webpack与rails一起使用,它如何使用 gem。 跑步 npm install && bundle && bundle exec rails s 关于版本的通知。 对于Rails 3,请检查您的gem文件,确保所有gem与Rails 3兼容。 对于Rails 4...

    sap:AngularJS + Rails应用程序,包含基本配置和示例发表CRUD

    8. **学习资源**:为了深入理解这个应用,开发者或学习者需要掌握AngularJS和Rails的基础知识,包括它们的文档、教程和最佳实践。 总结来说,这个压缩包提供了一个集成AngularJS和Rails的项目实例,对于学习这两种...

    angular_rails_raffler:AngularJS + Rails-随机选择下一任总裁

    《AngularJS + Rails构建随机选总统应用解析》 在当今的Web开发领域,AngularJS和Ruby on Rails是两种备受推崇的技术。本项目“angular_rails_raffler”将这两者结合,创建了一个有趣的2016年总统选举随机选择器...

    jake:GraphQL + Rails API的天气

    杰克(Jake)是一个专为GraphQL和Rails API构建的天气查询服务器。这个项目展示了如何将...这不仅可以帮助你提升Ruby on Rails的技能,还能让你对GraphQL有深入的理解,这对于现代Web开发来说是一项非常重要的技术。

    webpackrails:Webpack + Rails,从browserify-rails分叉。 [不再维护]

    安装导轨:> = 3 将此行添加到应用程序的Gemfile中: gem 'webpackrails' 然后执行: $ bundle或将其自己安装为: $ gem install webpackrails在Rails根目录中创建package.json : { " name " : " app " , " ...

    Agile+Web+Development+with+Rails中文版.pdf

    《Agile Web Development with Rails》是一本经典的Rails开发指南,中文版的出版使得更多的中国开发者能够深入理解并应用敏捷开发方法与Ruby on Rails框架。这本书是Rails开发者的必备参考资料,它详细介绍了如何...

    browserify-rails:Browserify + Rails =模块化旧式JavaScript的好方法

    browserify-rails 该项目当前处于维护模式。 欢迎新的贡献者! 该库(通过Browserify)向Sprockets添加了CommonJS模块支持。 它使您可以混合使用//= require指令和require()调用,以包括普通的javascript文件和模块...

    使用Aptana+Rails开发Rails Web应用(中文)

    安装过程中,遵循提示进行,确保选择自定义安装并勾选Rails相关的插件,以便在Aptana中获得对Rails的全面支持。 安装完成后,打开Aptana Studio,创建一个新的Rails项目。在“File”菜单中选择“New”然后点击...

    react_on_rails:React + Webpack + Rails + railswebpacker的集成(包括React的服务器端渲染),可提供更好的开发人员体验和更快的客户端性能

    2020年10月1日:请参阅示例存储库,以通过支持SSR的rails / webpacker gem进行webpack的简单配置。 2020年8月2日:请参阅的示例回购,了解一种新的方法来设置使用rails/webpacker创建SSR捆绑包。 2020年7月8日:...

    Agile+Web+Development+with+Rails中文版

    《Agile Web Development with Rails中文版》是一本详细介绍如何使用Ruby on Rails框架进行敏捷Web开发的书籍。Rails是Ruby语言的一个强大的开源Web应用程序框架,它遵循敏捷开发的原则,旨在简化和加速Web应用的...

    Web开发:Ruby on Rails.pdf

    Web开发:Ruby on Rails.pdf

    Ruby+for+Rails

    通过阅读"Ruby for Rails.pdf"和"Ruby on Rails 初体验.ppt",你可以深入了解Ruby on Rails的各个方面,包括其哲学、核心概念以及如何构建实际的Web应用程序。随着对Rails的理解加深,你将能够高效地开发出功能丰富...

    Ruby+on+Rails快速Web应用开发实战.pdf

    Ruby on Rails(简称RoR或Rails)是一种开源的网络应用框架,用Ruby语言编写。它被设计用来轻松地实现MVC(模型-视图-控制器)设计模式,从而使开发人员能够快速和有条理地创建数据驱动的应用程序。接下来,我将详细...

    Ruby+Rails+社交+教程

    10. **测试**:Rails强调TDD(测试驱动开发),所以学习Rspec或MiniTest进行单元测试和集成测试是必要的。 11. **部署**:最后,了解如何将应用部署到生产环境,如Heroku或AWS,以及配置环境变量和数据库连接。 12...

    Ruby on Rails安装指南(Ruby 1.8.6+Rails 2.0.2)

    Ruby on Rails 安装指南 Ruby on Rails 安装指南是指安装 Ruby 1.8.6 和 Rails 2.0.2 的详细步骤。首先,需要下载 Ruby One-Click Installer 版本,并安装 Ruby。然后,下载 Rails 2.0.2 版本,并安装。接下来,...

    Agile+Web+Development+with+Rails+(4th+Ed....pdf

    Agile+Web+Development+with+Rails+(4th+Ed....pdf

    flexigrid+rails 新手代码-。-

    标题 "flexigrid+rails 新手代码-。-" 指涉的是一个关于使用 Flexigrid 和 Ruby on Rails 框架的初级教程或示例项目。Flexigrid 是一个 JavaScript 库,常用于创建可扩展、灵活的表格,而 Ruby on Rails 是一个流行...

    Ruby+Rails+社交+进阶教程5

    在本“Ruby+Rails+社交+进阶教程5”中,我们将深入探讨如何利用Ruby on Rails框架构建一个功能丰富的社交网络平台。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制...

Global site tag (gtag.js) - Google Analytics