2009年12月5日土曜日

ruby-oci8からOracleへ接続 CGI文字化け

http://ruby-oci8.rubyforge.org/ja/InstallForInstantClient.html
を参考にセットアップ

環境
Ubuntu 8.04
Ruby1.8.6
Apache 2.2.8
Oracle Instantclient 11.2
ruby-oci8


環境変数設定
$ export LD_LIBRARY_PATH=/opt/oracle/instantclient_11_2
$ export NLS_LANG=Japanese_Japan.UTF8

でコンソールでは文字化けせずに日本語の入った列もselectできた。
ところが同じスクリプトをCGIから実行すると日本語が文字化けする。


[Fri Dec 04 08:44:47 2009] [error] [client 127.0.0.1] Premature end of script headers: hogehoge.cgi
env.c:257:in oci8lib.so: Error while trying to retrieve text for error ORA-12705 (OCIError)
from /usr/local/lib/site_ruby/1.8/oci8.rb:229:in `initialize'
from /usr/local/lib/site_ruby/1.8/hoge/hogehoge.rb:309:in `new'
from /usr/local/lib/site_ruby/1.8/hoge/hogehoge.rb:309:in `initialize'
from /var/www/hogehoge.cgi:4:in `new'
from /var/www/hogehoge.cgi:4


Apacheの起動スクリプトに環境変数を設定してもだめ、検索した結果Apacheの環境変数は
SetEvnディレクティブでセットすることが分かりapache2.confを編集後再起動し無事に日
本語が表示できた。


...
SetEnv LD_LIBRARY_PATH /opt/oracle/instantclient_11_2
SetEnv NLS_LANG Japanese_JAPAN.UTF8
...

/etc/apache2/apache2.conf

2009年7月6日月曜日

Trac:ワークフローをカスタマイズする

Tracのデフォルトのワークフローは僕にとってあまり直感的ではないのでカスタマイズしてみる。

  • 着手するまでは課題を修正できる。

  • 着手したら解決するだけ。

  • 解決した課題は終了するか、差し戻しにする。


だけのワークフローにしよう。
Tracプロジェクトディレクトリ/conf/trac.iniを編集する。

[ticket-workflow]
revise = new,revised -> revised
revise.name = 課題を修正する
revise.permissions = TICKET_MODIFY

accept = new,revised,reopened -> accepted
accept.name = 着手する
accept.operations = set_owner_to_self
accept.permissions = TICKET_MODIFY

reopen = resolved,closed -> reopened
reopen.operation = del_resolution
reopen.permissions = TICKET_CREATE
reopen.name = 差し戻す

resolve = accepted -> resolved
resolve.name = 解決にする
resolve.operations = set_resolution
resolve.permissions = TICKET_MODIFY

close = resolved -> closed
close.name = 終了にする
close.permissions = TICKET_MODIFY


カスタマイズしたワークフローを画像で確認する。


trac.iniファイルをworkflow_parser.pyで処理して.dotファイルを作成してからGraphvizのdotコマンドでdotファイルを処理し画像ファイルに変換することで視覚化出きるそうだ。

workflow_parser.pyでtrac.iniファイルを処理し.dotファイルを作成する。

Trac-0.11.2.1.ja1/contrib/workflow/workflow_parser.py trac.ini
...
UnicodeEncodeError: 'ascii' codec can't encode ...


どうやらUTF-8でエンコードした日本語をasciiとして扱っているみたい。
http://trac.edgewall.org/ticket/6930 によるとworkflow_parser.py を修正すれば良いようだ。


import locale, codecs を追加し
sys.stdout.write(''.join(digraph_lines))

sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout);
sys.stdout.write(''.join(digraph_lines))
に修正してから動作確認。



$ workfloe_parser.py trac.ini > trac.dot

今度は無事dotファイルが作成できたようだ。
Graphvizのdotコマンドでdotファイルを処理し画像ファイルに変換する。

$ dot -T png < trac.dot > trac.png




いいじゃないですか!!