2012/02/11

Tracでgraphvizを使えるように・・・できなかった・・解決!

・・・ということで...graphvizと、graphvizpluginを導入して
Tracでフローチャートを描画できるようにしたいと思います。
(※失敗談も含めて順をおってしか書いておりません。あんまり役に立たないかもしれません。
  しかも失敗した理由は、完全に初歩的ミスです...。こういう時もあるということで(汗;)...)


<2012/02/11現在、失敗しています。:-p >

まずは、graphviz。yumからインストールします
バージョンは、2.12。
# yum install graphviz 
Downloading Packages:
(1/12): libtool-ltdl-1.5.22-7.el5_4.i386.rpm             |  37 kB     00:00  
(2/12): libXpm-3.5.5-3.i386.rpm                          |  45 kB     00:00  
(3/12): libXmu-1.0.2-5.i386.rpm                          |  62 kB     00:00  
(4/12): libgsf-1.14.1-6.1.x86_64.rpm                     | 113 kB     00:00  

(5/12): libcroco-0.6.1-2.1.x86_64.rpm                    | 129 kB     00:00  

(6/12): librsvg2-2.16.1-1.el5.x86_64.rpm                 | 178 kB     00:00  
(7/12): libXaw-1.0.2-8.1.i386.rpm                        | 324 kB     00:00  

(8/12): ghostscript-fonts-5.50-13.1.1.noarch.rpm         | 801 kB     00:00  
(9/12): graphviz-2.12-8.el5.i386.rpm                     | 1.1 MB     00:00  
(10/12): graphviz-2.22.0-4.el5.rf.x86_64.rpm             | 2.5 MB     00:04  
(11/12): urw-fonts-2.3-6.1.1.noarch.rpm                  | 4.5 MB     00:00  
(12/12): ghostscript-8.70-6.el5_7.6.x86_64.rpm           | 8.9 MB     00:01  
--------------------------------------------------------------------------------
Total                                           2.3 MB/s |  19 MB     00:08  
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Check Error:
  file /usr/bin/gxl2dot conflicts between attempted installs of graphviz-2.12-8.el5.i386 and graphviz-2.22.0-4.el5.rf.x86_64

・・・この様である。

というわけで・・・調べる...。
ふむふむ。

# yum install graphviz.x86_64
Installed:
  graphviz.x86_64 0:2.22.0-4.el5.rf                                          
Dependency Installed:
  ghostscript.x86_64 0:8.70-6.el5_7.6   ghostscript-fonts.noarch 0:5.50-13.1.1
  libcroco.x86_64 0:0.6.1-2.1           libgsf.x86_64 0:1.14.1-6.1            
  librsvg2.x86_64 0:2.16.1-1.el5        urw-fonts.noarch 0:2.3-6.1.1          
Complete!
はいっ。これでよさそうですね。

次に、Trac用のプラグインを導入します。
バージョンは、0.13。(←これがミスでした。詳しくは後述w)

# /usr/local/bin/python2.7 /usr/local/bin/easy_install http://trac-hacks.org/svn/graphvizplugin/0.13/
Tracを配置しているディレクトリ下のhtdocsディレクトリに
画像書き出し用のディレクトリを作り、書き込み可能にしておく。
# cd /var/trac/hogeproject/htdocs
# mkdir graphviz
# chown apache:apache graphviz
Tracでgraphvizプラグインをenabledに。

[components]
graphviz.* = enabled

httpdを再起動。
# service httpd restart
するも、Tracの管理画面のプラグイン画面に
Graphvizプラグインが表示されない・・・。

Tracのログを見ると...
2012-02-11 11:12:34,798 Trac[loader] ERROR: Skipping "graphviz = graphviz":
Traceback (most recent call last):
  File "build/bdist.linux-x86_64/egg/trac/loader.py", line 68, in _load_eggs
    entry.load(require=True)
  File "/usr/local/lib/python2.7/site-packages/setuptools-0.6c12dev_r88846-py2.7.egg/pkg_resources.py", line 1954, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
  File "build/bdist.linux-x86_64/egg/graphviz/__init__.py", line 17, in <module>
  File "build/bdist.linux-x86_64/egg/graphviz/graphviz.py", line 33, in <module>
ImportError: cannot import name find_element
Graphvizプラグインがインポートエラーを出している。
何故だ・・・。

とりあえず、該当ファイル(graphviz.py)のソースコードを見る。
...
from trac.mimeview.api import Context, IHTMLPreviewRenderer, MIME_MAP 
from trac.util.html import escape, find_elementfrom trac.util.text import to_unicode 
from trac.util.translation import _
...
うーん。

Tracのソースコードを見る...。
(Trac-0.12.2.ja1/build/lib/trac/util/html.py)
...
import re
from genshi import Markup, escape, unescape
from genshi.core import stripentities, striptags, START, END
from genshi.builder import Element, ElementFactory, Fragment
from genshi.filters.html import HTMLSanitizer
__all__ = ['escape', 'unescape', 'html', 'plaintext', 'TracHTMLSanitizer']
class TracHTMLSanitizer(HTMLSanitizer):
...
Pythonのことは全然わからないんですが、
このファイルを全部見たところ、”find_element”なんか存在しないのです...。
(だったら他でインポートされているのだろうか・・・)
どうしたらいいんだろうー (´;ω;`)

似たような問題のチケットはTrac-hacksに発見したが:
http://trac-hacks.org/ticket/9180 (放置されたまま5年経過しているようだ)

うーん。

[2012/02/11 12:02 追記]

・・・もしかして。

http://trac.edgewall.org/browser/trunk/trac/util/html.py
(最新版のTrac(Trac 0.13)のhtml.py)

・・・なるほど!www

私はやっぱりアホだったようです(>ω<;)

現在、graphvizpluginのリポジトリに存在するバージョンは
0.9、0.10、0.11、0.13...の4つ。
http://trac-hacks.org/browser/graphvizplugin

そして私が導入しているTracは、Trac 0.12ですから...。
0.12用のgraphvizpluginが無いからということで
何の気なしに、最新版のgraphvizplugin 0.13を選んでしまいました。

ちなみに・・・リポジトリには
/Readme.txt
というファイルが置かれていて、インストール前にこれは読んでみたのですが、
ここに、0.13に関する情報はなかったです。(だからって選ぶなよ、私w)

さらに、0.13のディレクトリには、
ReleaseNotes.txt
というファイルが含まれていますが、これについては0.7.1用の文書を
そのままコピーしただけで未更新のようでした。とても古い。
(これも...だからって気にせずインストールしてしまうとは、私ってやつは...www)

いつもはもうちょっと気をつけるのですが。
うっかりですね・・・(汗;)

ちなみに...言い訳をすると、この記事の手順はちょっと端折っていて、
実際には、個別のTrac環境にプラグインをインストールして試用をしてみています。
自分の環境で動作確認がとれていないものを、実稼動しているTrac全体に導入するのは流石に危ないので・・・。

...とりあえず、graphvizplugin 0.13を削除。

# rm /usr/local/lib/python2.7/site-packages/graphviz-0.13.0.6-py2.7.egg

気を取り直して、graphvizplugin 0.11をインストール。
(尚、今度はsvn exportしてくることにします。)
http://trac-hacks.org/svn/graphvizplugin/0.11/
# svn export http://trac-hacks.org/svn/graphvizplugin/0.11/ graphvizplugin-0.11/
# cd graphvizplugin-0.11
# /usr/local/bin/python2.7 setup.py build
# /usr/local/bin/python2.7 setup.py bdist_egg
# cd dist
# /usr/local/bin/python2.7 /usr/local/bin/easy_install *.egg
httpdを再起動。
# service httpd restart
きましたわーーーーーーーっ!(>ω<)(←

あとは、trac.iniに、[graphviz]セクションを。
cache_dir = htdocs/graphviz

これで・・・。

Wikiになんか書いてみる。


{{{
#!graphviz
digraph G {Hoge->Piyo}
}}}

おおー。


描画できました
それにしても、Wikiでフローチャートが表現できるとは...すばらしいですね!

参考にさせていただいたサイト(感謝♪):




0 件のコメント:

コメントを投稿

お気軽にコメントをお寄せください m(_ _)m♪
"コメントの記入者"欄から[名前/URL]を選ぶと、登録なしでコメント投稿していただけます。