2013年12月7日土曜日

Kanon(Trac Lightning)のプロジェクト移行手順

ちょっと試してみたのでメモ。
サーバーのPCを変更する等で、Kanon(Trac Lightning)のプロジェクトを他のPCのKanonに移行する手順です。
KanonとかTrac Lightningについての詳細はググって調べてみてください。
以下、Linux(CentOS6)上で動作させています。
※以下の手順は一例です。やり方は色々あるはず。
※Kanonのインストールについてはまた別途。。。

移行データの準備

以下、移行元PCで実行します。

各プロジェクトの移行データ

各プロジェクトのTrac,SVNのデータを移行用ファイルに出力します。
以下のように、trac-adminとsvnadminのhotcopyまたはdumpを実行します。
これを各プロジェクト名について実行します。
trac-admin /var/opt/kanon/trac/(プロジェクト名) hotcopy (プロジェクト名)_trac
svnadmin dump /var/opt/kanon/svn/(プロジェクト名) > (プロジェクト名)_svn.dmp
#trac-adminはパスが通ってなかったので/usr/bin/trac-adminとして実行したはず。。。

ユーザー情報

Kanonが管理しているユーザー情報は上記のファイルには存在しません。
/etc/opt/kanonのkanon_users.htdigestとsvnauthzが必要になりますので、どこかにコピーしておきます。

移行データを反映

以下、移行先PCで実行します。

各プロジェクト

まずSVN側を。
svnadmin create /var/opt/kanon/svn/(プロジェクト名)
svnadmin load /var/opt/kanon/svn/(プロジェクト名) < (プロジェクト名)_svn.dmp
次にTrac側を。
cp -Rf (プロジェクト名)_trac /var/opt/kanon/trac/(プロジェクト名)
コピー後、/var/opt/kanon/trac/(プロジェクト名)/conf/trac.iniの中身を確認し、移行前のIPアドレスや存在しないパスがあれば修正します。

Tracの更新(Tracのバージョンが最新であれば実行不要と思います)。
trac-admin /var/opt/kanon/trac/(プロジェクト名) upgrade
trac-admin /var/opt/kanon/trac/(プロジェクト名) wiki upgrade
 SVNと同期。ちなみに「trac-admin /var/opt/kanon/trac/(プロジェクト名) resyncではエラーが出て実行できません。
trac-admin /var/opt/kanon/trac/(プロジェクト名) repository resync ""

ユーザー情報

コピーした移行前のkanon_users.htdigestとsvnauthzを/etc/opt/kanon配下にコピー。

移行データのアクセス権設定

以下の通り実行。
chwon -R apache:apache /var/opt/kanon/trac/(プロジェクト名)
chwon -R apache:apache /var/opt/kanon/svn/(プロジェクト名)


反映完了

apache再起動。
/etc/init.d/httpd restart

2013年12月2日月曜日

TinyPG(a Tiny Parser Generator) その2

ちょっと間が空きました。TinyPGの続きを。

構文解析ツールの中でもTinyPGが良いと思うところは、定義した構文解析の処理をC#またはVBのソースコードで生成してくれることです。アプリ開発で構文解析機能を作る場合、専用のライブラリを用意する必要は無く、TinyPGで生成したソースコードを組み込めば実現できるわけです。

ソースコードの生成

前回の続きになります。
前回で構文解析したときに(メニューでBuildを実行したら)、実はソースコードが生成されています。
構文解析定義の@TinyPGの行に定義してある設定に従い生成されています。



Languageには"C#"か、"VB"が指定できます。生成するソースコードの言語の種別です。
OutputPathにはソースコードの生成パスを指定します。ちなみに、末尾に¥を付加しないと最後の¥から末尾までをファイル名として生成します。つまり上記の画像の設定ではC:¥配下にwork***.csのようなファイルを生成します。

さて、OutputPathで指定したパスにソースコードが4ファイル生成されているはずです。
それぞれ以下の機能を持ちます(LanguageがC#の場合)。

Parser.cs、Scanner.cs、ParseTree.cs
解析対象の文字列を読み込み・解析・分解・生成(コンパイル)します。

TextHighlighter.cs
解析対象の文字列を解析し、構文解析定義に定義した配色設定に従った情報を生成します。TinyPGで構文解析すると、Expression Evaluatiorにある文字列が構文解析定義の記述に従い配色されますが、その仕組みをC#ソースにしたものです。
RichTextBoxで使用可能な配色情報を用意します。

アプリケーションへの組み込み

実際にアプリケーションに組み込みます。
上記のソースコードをC#プロジェクトに組み込んだ後、以下の記述を実行したい箇所に記述します(以降、必要なusingは省略しています)。
// 解析したい文字列
string input = "... your expression here ...";
// 解析
// 結果はParseTreeに格納される
Parser parser = new Parser(new Scanner());
ParseTree tree = parser.Parse(input);
これで任意の文字列を解析できます。
TextHighlighter.csについては以下のような記述を行います。
// 解析したい文字列
string input = "... your expression here ...";
// 解析処理のインスタンス生成
Scanner scanner = new Scanner();
Parser parser = new Parser(scanner);
// 表示させたいrichTextbox、各インスタンスを指定する
TextHighlighter highlighter = new TextHighlighter(richTextbox, scanner, parser);
解析したい文字列への配色が不要ならば、上記は記述しなくとも解析自体は可能です。

解析結果

解析結果はParseTreeクラスに設定されます。PaeseTreeクラスは木構造に従い再帰的に子を持ちます。TinyPGのOutputにあるParse Tree表示と同様のデータ構造です。
詳しくはまた次回。。。

ソレデハ。