linux下bitnami-redmine中安裝插件redmine_dmsf總結

安裝插件redmine_dmsf總結


背景

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 (buildd@palmer) (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插件安裝完後,要保證以下兩個地方的配置保持一致(如下所示):

  1. 插件配置:管理 -> 插件 -> DMSF -> 配置
  2. 配置文件:redmine_dmsf\extra\xapian_indexer.rb

有了前面章節的理論基礎,改起來才能遊刃有餘,否者無從下手(我就在配置修改這地方這折騰了好久)。“redmine管理 -> 插件 -> DMSF -> 配置”如下圖所示,我這裏採用默認的配置,沒有修改,而是修改redmine_dmsf\extra\xapian_indexer.rb文件以便讓兩者保持一致。

dmsf配置圖

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:

  1. Change the configuration part of redmine_dmsf/extra/xapian_indexer.rb file according to your environment.
  2. 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中全文搜索

自動構建索引數據庫

前面的索引數據庫,是通過手動錄入命令執行的。隨時會有人在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:

  1. Change the configuration part of redmine_dmsf/extra/xapian_indexer.rb file according to your environment.
  2. 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存在以下幾點不足:

  1. 同樣的關鍵詞、同樣的PDF文檔,在confluence上能搜索出來,而在redmine中搜索不出來。可見DMSF搜索完整性不夠,不知道未來的DMSF會不會解決這個問題。
  2. 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        # 註釋:設置完了可以用這條命令查看設置的效果
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章