安装插件redmine_dmsf总结
- 背景
- 环境
- linux系统版本
- redmine版本
- dmsf插件版本
- 安装过程
- 安装redmine
- 安装dmsf插件
- 在redmine中使用全文搜索
- dmsf幕后原理
- Xapian和Omega基础知识
- 手动建立/查询索引数据库
- dmsf配置修改
- 使用全文搜索
- 自动构建索引数据库
- dmsf幕后原理
- 总结
- 附录A 安装插件遇到的问题总结
- 无法访问https://rubygems.org
- 解决方法1 - 翻墙
- 解决方法2 - 使用RubyGems镜像
- 解决方法3 - 手动下载源码编译/安装
- 安装nokogiri依赖库老是报错
- 无法访问https://rubygems.org
背景
redmine自带的搜索功能,只能搜索wiki,无法搜索附件文件里的内容。对于公司的大数据、知识库来说,是无法忍受的。为此找了一个插件dmsf来解决这个问题,dmsf支持全文搜索功能(即fulltext search)。
环境
linux系统版本
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 12.04 LTS
Release: 12.04
Codename: precise
#
# cat /proc/version
Linux version 3.2.0-23-generic-pae ([email protected]) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu4) ) #36-Ubuntu SMP Tue Apr 10 22:19:09 UTC 2012
#
redmine版本
bitnami-redmine-3.2.1-0-linux-installer.run
dmsf插件版本
redmine_dmsf-1.5.6,中文称之为“文档管家”插件。
安装过程
安装redmine
安装bitnami-redmine-3.2.1-0-linux-installer.run过程很简单,略过。
安装dmsf插件
在bitnami-redmine下如何安装插件,先阅读《How to install a plugin on Redmine.doc》,充实下基础。
安装dmsf插件,参考插件里的说明文档,根据文档要求,必须先安装一些依赖工具:
# sudo apt-get install xapian-omega libxapian-dev xpdf xpdf-utils antiword unzip catdoc libwpd-tools libwps-tools gzip unrtf catdvi djview djview3 uuid uuid-dev xz-utils
另外需要注意的是,在plugins目录下redmine_dmsf-1.5.6文件夹要重命名为redmine_dmsf,如下所示:
# tree -L 2 /opt/redmine-3.2.1-0/apps/redmine/htdocs/plugins
/opt/redmine-3.2.1-0/apps/redmine/htdocs/plugins
├── README
└── redmine_dmsf
├── app
├── assets
├── CHANGELOG.md
├── config
├── db
├── dmsf_user_guide.odt
├── extra
├── Gemfile
├── init.rb
├── lib
├── README.md
└── test
8 directories, 6 files
在安装的过程中,遇到了一些问题,记录下来,详见附录A。
在redmine中使用全文搜索
dmsf插件安装完毕,重启redmine,此时还无法使用全文搜索功能(即无法搜索附件内容),需要先创建文件索引(包括文件名索引和文件内容索引)。DMSF是使用Xapian和Omega工具来创建索引的。先弄清楚dmsf的原理。
dmsf幕后原理
Xapian和Omega基础知识
在继续之前,先来认识Xapian和Omega,引用IBM技术文档的内容:用 Xapian 和 Omega 读取并索引文档。
存储并提供对文档和信息的访问是很多公司都面临的一个日益严重的问题。解决这个问题有很多解决方案,包括 wikis 和结构化了的文档存储,但全文本索引通常是从大量文档中获取信息的惟一方式。Xapian 是一种开源工具,可读取并索引文档,包括 HTML、PDF、 OpenOffice、Microsoft? Office? 等格式的文档,而且还具有一些可编程的接口来添加和抽取信息,包括 Java? 技术,这样一来,您就可以在部署了 WebSphered? 的环境内支持文档索引。在本文中,了解如何安装并部署一个典型的 Xapian 来索引各种信息,然后再来看看使用不同的语言绑定抽取信息的几个例子。这个过程将会侧重如何在一个典型的公司内部网环境内使用它。本文还将提供一个有关 Omega 的快速概览,Omega 是一个定制工具,用来与 Xapian 的基础设施协作。
Xapian 和 Omega 是独立的两个组件,旨在相互协作来提供索引和搜索功能。Xapian 组件提供了核心的数据库功能(存储信息)以及搜索和检索系统来查找单词和单词组合(参见 参考资料)。
Omega 组件提供了一些工具来将不同格式的信息转化并解析成 Xapian 需要的原始格式以便它可以被索引。Omega 使用了多种工具,比如 pdftotext,然后再提交转化并过滤了的基于文本的信息,以便文档的索引和结构可以被标识并存储在 Xapian 数据库。Omega 是 Xapian 下载的一部分。
本地文件夹“Xapian和Omega基础知识”里搜集了一些基础知识,先把基础知识学扎实来再往下继续,磨刀不误砍柴工。
手动建立/查询索引数据库
为了检查插件安装的正确性,也为了加深对Xapian和Omega的理解,先来手动建立、查询索引数据库。
- 建立索引数据库
# omindex --db dbname --url indexurl /home/files
dbname是自定义的数据库名(表现出来的是一个文件夹名),indexurl是自定义的索引信息的URL, /home/files下是你要建立索引的文件路径。执行后会在当前路径下生成一个文件夹dbname,那indexurl在哪儿呢?马上就看到它了。
- 查询数据库
从数据库dbname中检索含有“信息“的文档。
# quest --db=dbname 信息
Parsed Query: Xapian::Query(Z信息:(pos=1))
MSet:
67 [100%]
url=indexurl/f00153.txt
sample=2016 年 04 月 22 日 周五 出版 * * * * * *
type=text/plain
modtime=1604220123
size=56841
dmsf配置修改
dmsf插件安装完后,要保证以下两个地方的配置保持一致(如下所示):
- 插件配置:管理 -> 插件 -> DMSF -> 配置
- 配置文件:
redmine_dmsf\extra\xapian_indexer.rb
有了前面章节的理论基础,改起来才能游刃有余,否者无从下手(我就在配置修改这地方这折腾了好久)。“redmine管理 -> 插件 -> DMSF -> 配置”如下图所示,我这里采用默认的配置,没有修改,而是修改redmine_dmsf\extra\xapian_indexer.rb
文件以便让两者保持一致。
而redmine_dmsf\extra\xapian_indexer.rb
默认的配置只适合纯redmine,不适合bitnami-redmine,对于xapian_indexer.rb
文件的修改,对比我本地保存的“xapian_indexer.rb_改后”和“xapian_indexer.rb_改前”,便可一目了然。改以下三个变量定义:
- $redmine_root
- 作用:redmine的安装路径
- 修改:修改成bitnami-redmine的路径,如:
$redmine_root = ‘/opt/redmine-3.2.1-0/apps/redmine/htdocs‘
- $files
- 作用:通过dmsf模块上传的文件存储路径。也是要建立索引的文件所在的路径。
- 修改:要求redmine_root/files的路径要跟图表 1中的“文件存储目录”保持一致。我这里设置为:
$files = ‘files/dmsf‘
- $dbrootpath
- 作用:索引数据库的存放路径。按关键词搜索时,就是在这个数据库中搜索的。
- 修改:要求$dbrootpath的路径要跟图表 1中的“Index database”保持一致。我这里设置为:
$dbrootpath = ‘/opt/redmine-3.2.1-0/apps/redmine/htdocs/files/dmsf_index‘
使用全文搜索
DMSF插件说明有如下描述:
### Fulltext search (optional)
If you want to use fulltext search features, you must setup file content indexing.
It is necessary to index DMSF files with omega before searching attempts to receive some output:
- Change the configuration part of redmine_dmsf/extra/xapian_indexer.rb file according to your environment.
- Run
ruby redmine_dmsf/extra/xapian_indexer.rb -f
如何修改xapian_indexer.rb已经在上个章节中介绍了,配置完后,启动/opt/redmine-3.2.1-0/use_redmine控制台(不能用linux系统自带的控制台,会找不到ruby执行文件),执行以下命令:
# /opt/redmine-3.2.1-0/use_redmine
# cd /opt/redmine-3.2.1-0/apps/redmine/htdocs/plugins/
# ruby redmine_dmsf/extra/xapian_indexer.rb -v
这里额外补充下ruby 的附加参数说明:
# ruby xapian_indexer.rb –v # -v显示过程,索引所有项目的文件和代码仓库
# ruby xapian_indexer.rb -v –f # -f只索引文件
# xapian_indexer.rb -v –r # -r只索引代码仓库
# xapian_indexer.rb -v -r -p proj_Id1, proj_Id2 # -p索引指定项目
之后就可以在redmine中使用全文搜索功能,搜索附件文件内容了,如下图所示。
自动构建索引数据库
前面的索引数据库,是通过手动录入命令执行的。随时会有人在redmine上传文件,手动录入命令来构建索引数据库是不现实的。所以在DMSF的README文档中,有如下描述,就是创建cron任务定时构建索引数据库(这块我还没研究,但这也不是好办法啊,有没有提交了附件文档,就能感知到,并自动构建索引数据库呢?待以后研究)。
### Fulltext search (optional)
If you want to use fulltext search features, you must setup file content indexing.
It is necessary to index DMSF files with omega before searching attempts to receive some output:
- Change the configuration part of redmine_dmsf/extra/xapian_indexer.rb file according to your environment.
- Run
ruby redmine_dmsf/extra/xapian_indexer.rb -f
This command must be run on regular basis (e.g. from cron)
Example of cron job (once per hour at 8th minute):
8 * * * * root /usr/bin/ruby redmine_dmsf/extra/xapian_indexer.rb -f
See redmine_dmsf/extra/xapian_indexer.rb for help.
总结
DMSF插件给redmine带来了全文搜索功能,但为了对比起搜索的准确性、完整性。我跟confluence相比了下(confluence是一款商业化的知识库管理系统),经过一番体验,发现redmine_dmsf-1.5.6存在以下几点不足:
- 同样的关键词、同样的PDF文档,在confluence上能搜索出来,而在redmine中搜索不出来。可见DMSF搜索完整性不够,不知道未来的DMSF会不会解决这个问题。
- DMSF无法做到,自动感知附件上传,以便自动触发构建文件索引。只能做到后台开启一个cron任务,定时的触发构建文件索引,实时性较差。(对于这点,有可能是我研究不够深入,如果我错了,欢迎指正!)
附录A 安装插件遇到的问题总结
无法访问https://rubygems.org
在执行bundle install –without development test postgresql sqlite –no-deployment的过程中,会检查plugins目录下插件的依赖性,并自动下载、安装所依赖的库。
这次安装,出现了无法访问https://rubygems.org的情况,导致依赖库无法下载安装。错误描述如下:
Gem::RemoteFetcher::FetchError: Errno::ECONNABORTED: An established connection was aborted by the software in your host machine. - SSL_connect (https://rubygems.org/gems/simple_enum-2.3.0.gem)
怎么解决该问题,有如下几种解决方法:
解决方法1 - 翻墙
RubyGems一直以来在国内都非常难访问到,在本地你或许可以翻墙,当你要发布上线的时候,服务器可不允许翻墙哦,你就很难搞了!所有这种方法在本地合适,服务器上不合适。
解决方法2 - 使用RubyGems镜像
因为墙的存在,催生了“RubyGems镜像”。官网https://rubygems.org访问不了,那就用镜像咯,如https://gems.ruby-china.org/(镜像随着时间的推移,有可能会变,自己百度“RubyGems镜像”搜索)。
你可以用 Bundler 的 Gem 源代码镜像命令设置,命令如下。
# bundle config mirror.https://rubygems.org https://gems.ruby-china.org
#
# bundle config# 注释:设置完了可以用这条命令查看设置的效果
解决方法3 - 手动下载源码编译/安装
去https://rubygems.org/gems中找到simple_enum
指定的版本(这里是simple_enum-2.3.0.zip
),把源码下载下来进行编译:gem build simple_enum.gemspec
,(要启动use_redmine.bat
进入特定的SHELL,不能用Windows或者Linux自带的cmd和shell,命令如下所示):
# gem build simple_enum.gemspec
Successfully built RubyGem
Name: simple_enum
Version: 2.3.0
File: simple_enum-2.3.0.gem
#
编译成功后安装:
# gem install --local simple_enum-2.3.0.gem
Successfully installed simple_enum-2.3.0
Parsing documentation for simple_enum-2.3.0
Installing ri documentation for simple_enum-2.3.0
Done installing documentation for simple_enum after 0 seconds
1 gem installed
安装nokogiri依赖库老是报错
第一次是提示没有安装g++编译器,(因为编译nokogiri需要用到g++)。这个问题通过安装g++解决。
安装完g++,编译过程提示找不到一个头文件和链接库。通过添加编译选项–use-system-libraries解决,如下所示,注意:
# bundle config # 先用该命令查看原本自带的编译选项
#
# bundle config build.nokogiri "--use-system-libraries --with-opt-dir=/opt/redmine-3.2.1-0/common " # 添加--use-system-libraries编译选项(要保留原本自带的哦)
#
# bundle config # 注释:设置完了可以用这条命令查看设置的效果