Memo/Trac

http://dexlab.net/pukiwiki/index.php?Memo%2FTrac
 

Apache Bloodhound


trac kanon

  • Kanon LAB
    • Linux向けにtrac + trac plugin + Maven + Jenkinsを一括してインストールできる。
      同様なものに、Windows向けにはTrac Lightningがある。
    • 似たようなツールに「Memo/Redmine」がある
  • 対応OS
    • Ubuntu 10.10 Server
    • Debian GNU/Linux, GNU/kFreeBSD 6.0
    • RedHat? Enterprise Linux 6.0
    • Oracle Enterprise Linux 6.0
    • CentOS 5.x (Experimental)

登録ユーザのみ使用可能にする

  1. vim /etc/httpd/conf.d/kanon.conf
  2. ----
  3. #<LocationMatch "/[^/]+/login($|/)">
  4. <LocationMatch "/">
  5. ----
  6. service httpd graceful

インストール

  1. http://kanon.ultimania.org/hg/KanonConductor/ からkanonダウンロード。右のメニューから「gz」のリンクをコピー
    cd /tmp
    wget http://kanon.ultimania.org/hg/KanonConductor/archive/tip.tar.gz
    tar xvfz tip.tar.gz
    cd KanonConductor-803f7b41dfdf/
    ./kanon-setup
  2. Maven, Jenkins をインストールするかどうか聞いてくるので用途に応じて「y」「n」で選択
  3. インストール後、ブラウザで http://www.example.com/trac/SampleProject/ を開いてみる
  4. adminユーザでログインし、管理メニューを見てみる
    ユーザ名パスワード
    adminadmin
    leaderleade
    guestguest
  • セットアップガイド:http://www.example.com/trac/SampleProject/wiki/TLSetup
    インストール先/opt/kanon/
    インストール先容量(du -sh)50MB
    データディレクトリ/var/opt/kanon/
    設定ディレクトリ/etc/opt/kanon/
    Kanon web設定/etc/httpd/conf.d/kanon.conf
    Version管理 web設定/etc/httpd/conf.d/vcs.conf
    Digest認証/etc/opt/kanon/kanon_users.htdigest
    Subversion認証/etc/opt/kanon/svnauthz
    /var/opt/kanon/
    |-- bzr
    |-- git
    |-- hg
    |-- svn
    |   `- SampleProject
    `-- trac
        |-- .egg-cache
        `-- SampleProject

Trac


定量的プロジェクト管理ツール


mime-type

  • text/x-trac-wiki:svnのmime-typeに設定するとtracのリポジトリビューワ表示の際にwikiレンダリングされる

その他プラグイン

  • TicketExtPlugin チケットにテンプレートを追加など
    • 要:CustomFieldAdminPlugin
      1. CentOS5.8, Trac0.11jaでは以下のエラーで動作せず。プラグインの競合かもしれない
      2. KeyError: 'customfieldadmin/locale'
    • 要:json-py
    • TicketExtPlugin?インストール(Trac0.11の場合) DecoratorPlugin?と競合するのでext_decoration=false
      1. sudo su -
      2. cd /usr/local/src/
      3.  
      4. svn export http://trac-hacks.org/svn/ticketextplugin/0.11 ticketextplugin
      5. cd ticketextplugin
      6.  
      7. python setup.py bdist_egg
      8. cp dist/*.egg /usr/share/trac/plugins/
      9.  
      10. vi /usr/share/trac/conf/trac.ini
      11. ----
      12. [components]
      13. ticketext.* = enabled
      14.  
      15. [decorator]
      16. ext_decoration = false
      17.  
      18. [ticketext]
      19. 不具合.template =  * OS: [[BR]] * ブラウザ: [[BR]] * 対象ソフト: [[BR]] * 質問/不具合の内容: [[BR]] * 問題の再現方法: [[BR]] 1. [[BR]] 1. [[BR]] 1. [[BR]] * 結果: [[BR]] * 期待した結果: [[BR]] * スクリーンショット: [[BR]]
      20. 不具合.enablefields =
      21. ----
      22.  
      23. service httpd graceful

コミットログからマイルストーンを完了にする

あまりテストしていないので自己責任で。

コミットログに「milestone #1」と記入すると「チケット#1のマイルストーンを完了」に変更するパッチ。
コマンド名を変更したい場合は「'milestone': '_cmdMilestoneClose?'」の「milestone」を任意の英数字に変更


trac-post-commit-hookのテスト

  • テスト
    1. python trac-post-commit-hook -p /var/www/trac/SandBox -m "re #2 test"             
  • エラー「Unexpected error while processing ticket ID...」の場合、ブラウザ側でコメント等をいれて更新してみる。プラグイン追加等でDBが変わっている場合にもエラーになる。

ExcelやOpenOffice?.org Calcから表をコピー

  • Trac 0.11.7.ja1 + TracWysiwyg? 0.2で確認
  1. 編集モードにし、Wysiwygボタンをクリック
  2. ExcelやOpenOffice?.org Calcから表を選択しコピー
  3. Trac側で貼り付け。※色やフォント等は失われる

クエリの結果をWikiに保存

テーブル情報

カスタムレポート等の作成時にテーブル内容を参照する必要がある

  • スキーマ一覧
    1. sqlite3 /var/www/trac/SandBox/db/trac.db .schema
  • テーブル一覧
    1. sqlite3 /var/www/trac/SandBox/db/trac.db .tables

tracにスクリーンショットを添付できるFirefox/Chromeプラグイン「fulmo」

  • http://ciklone.com/fulmo/
    • fulmo(フルモ)とは、オープングルーヴが作った、高速・シンプルで使いやすい、オープンソースのバグ報告ツールです。fulmoは、品質管理チーム・テスター・開発者のためのツールであり、開発しているWebアプリケーションのバグをすばやく報告することが出来ます。fulmoは、Google Chrome や Firefox のブラウザ拡張ツールです。BSD ライセンスにもとづいて利用できるオープンソースです。

MediaWiki?からTrac Wikiへの変換


mod_pythonの代わりにmod_wsgiを使う

mod_pythonプロジェクトはclosedになったため、mod_wsgiを使ってインストールする場合。高速化も期待出来る。
trac 0.12以降で良い場合は kanon の方が良いだろう。

  • Segmentation faultが出る場合は、mod_pythonをアンインストール
    1. yum remove mod_python
  • trac 0.11.7.jaのインストール
    1. yum install python python-devel setuptools mod_wsgi python-sqlite2 httpd mod_ssl sqlite gcc --enablerepo=epel
    2. cd /tmp
    3. wget http://peak.telecommunity.com/dist/ez_setup.py
    4. python ez_setup.py
    5. easy_install http://svn.edgewall.org/repos/genshi/tags/0.6.0/
    6. easy_install http://www.i-act.co.jp/project/products/downloads/Trac-0.11.7.ja1.zip
    7.  
    8. # TraM用のall, テスト用のSandBoxを作成
    9. mkdir -p /var/www/svn
    10. mkdir -p /var/www/trac
    11. svnadmin create --fs-type=fsfs /var/www/svn/all
    12. svnadmin create --fs-type=fsfs /var/www/svn/SandBox
    13. chown -R apache. /var/www/svn/all
    14. chown -R apache. /var/www/svn/SandBox
    15. trac-admin /var/www/trac/all initenv "all" "sqlite:db/trac.db" "svn" "/var/www/trac/all" --inherit=/usr/share/trac/conf/trac.ini
    16. trac-admin /var/www/trac/SandBox initenv "SandBox" "sqlite:db/trac.db" "svn" "/var/www/trac/SandBox" --inherit=/usr/share/trac/conf/trac.ini
    17. chown -R apache. /var/www/trac/all
    18. chown -R apache. /var/www/trac/SandBox
    19. trac-admin /var/www/trac/all/ resync
    20. trac-admin /var/www/trac/SandBox/ resync
    21.  
    22. # trac共通設定ファイル類を作成。trac.iniの共通化。JS,CSS,画像等は静的に置いて高速化。
    23. trac-admin /var/www/trac/all/ deploy /usr/share/trac/htdocs
    24. mkdir -p /usr/share/trac/{conf,plugins,templates}
    25. touch /usr/share/trac/conf/trac.ini
    26.  
    27. # パスが取得できない部分があるので直接指定
    28. vim /usr/share/trac/cgi-bin/trac.wsgi
    29. ----
    30. #!/usr/bin/python
    31. import os
    32. import sys
    33. reload(sys)
    34. sys.setdefaultencoding("utf-8")
    35.  
    36. def application(environ, start_request):
    37.     if not 'trac.env_parent_dir' in environ:
    38.         environ.setdefault('trac.env_parent_dir', '/var/www/trac/all')
    39.     if 'PYTHON_EGG_CACHE' in environ:
    40.         os.environ['PYTHON_EGG_CACHE'] = environ['PYTHON_EGG_CACHE']
    41.     elif 'trac.env_path' in environ:
    42.         os.environ['PYTHON_EGG_CACHE'] = \
    43.             os.path.join(environ['trac.env_path'], '.egg-cache')
    44.     elif 'trac.env_parent_dir' in environ:
    45.         os.environ['PYTHON_EGG_CACHE'] = \
    46.             os.path.join(environ['trac.env_parent_dir'], '.egg-cache')
    47.     from trac.web.main import dispatch_request
    48.     return dispatch_request(environ, start_request)
    49. ----
    50.  
    51. # wsgiの設定
    52. vim /etc/httpd/conf.d/wsgi.conf
    53. ----
    54. LoadModule wsgi_module modules/mod_wsgi.so
    55.  
    56. WSGIPythonEggs /var/www/.python-eggs
    57. WSGISocketPrefix /var/run/wsgi
    58. ----
    59.  
    60. # tracキャッシュの設定
    61. mkdir /var/www/trac/.egg-cache
    62. chown apache. /var/www/trac/.egg-cache
    63.  
    64. # pythonキャッシュの設定
    65. mkdir /var/www/.python-eggs
    66. chown apache. /var/www/.python-eggs
    67.  
    68. # Digest認証の設定
    69. mkdir -p /etc/subversion
    70. htdigest -c /etc/subversion/.htdigest password admin
    71. chown apache. /etc/subversion/.htdigest
    72.  
    73. # DocumentRoot
    74. mkdir -p /var/www/vhost/example.com/public_html
    75. chown apache. /var/www/vhost/example.com
    76.  
    77. # Apache NameVirtualHostの設定
    78. vim /etc/httpd/conf.d/vhost.conf
    79. ----
    80. NameVirtualHost *:80
    81. ----
    82.  
    83. vim /etc/httpd/conf.d/example.com.conf
    84. ----
    85. <VirtualHost *:80>
    86.   ServerAdmin webmaster@example.com
    87.   ServerName trac.example.com
    88.   ServerAlias 127.0.0.1
    89.   ErrorLog logs/trac.example.com-error_log
    90.   CustomLog logs/trac.example.com-access_log combined env=!no_log
    91.  
    92.   DocumentRoot /var/www/vhost/trac.example.com
    93.   Alias /trac_common/ /usr/share/trac/htdocs/common/
    94.  
    95.   WSGIDaemonProcess trac user=apache group=apache processes=2 threads=25 maximum-requests=10000
    96.   WSGIProcessGroup trac
    97. #  WSGIScriptAlias /projects /usr/share/trac/cgi-bin/trac.wsgi
    98.   WSGIScriptAlias /projects /usr/share/trac/cgi-bin/tram.wsgi
    99.   SetEnv trac.env_parent_dir /var/www/trac
    100.  
    101.   <Location /projects>
    102.     WSGIApplicationGroup %{GLOBAL}
    103.  
    104.     Order deny,allow
    105.     Allow from all
    106.  
    107.     ExpiresActive On
    108.     ExpiresByType application/x-javascript A259200
    109.     ExpiresByType application/javascript A259200
    110.     ExpiresByType image/png A2592000
    111.     ExpiresByType image/jpeg A2592000
    112.     ExpiresByType image/gif A2592000
    113.     ExpiresByType text/css A2592000
    114.   </Location>
    115.  
    116.   <LocationMatch "/projects/">
    117.     AuthType Digest
    118.     AuthName password
    119.     AuthUserFile /etc/subversion/.htdigest
    120.     Require valid-user
    121.   </LocationMatch>
    122.  
    123. </VirtualHost>
    124. ----
    125. service httpd restart
  • tram (trac 0.11対応版)のインストール
    • mod_wsgiでTraMを使う方法 - Reinvention of the Wheel
      1. cd /tmp
      2. svn export http://svn.sourceforge.jp/svnroot/shibuya-trac/plugins/TraM/branches/genshi-ja tram-ja
      3. cd tram-ja
      4. python setup.py install
      5.  
      6. vi /usr/share/trac/conf/trac.ini
      7. ----
      8. [components]
      9. tramplugin.* = enabled
      10. ----
      11.  
      12. vi /var/www/trac/all/conf/trac.ini
      13. ----
      14. [components]
      15. trac.ticket.report.* = disabled
      16. trac.ticket.web_ui.newticket = disabled
      17. ganttcalendar.* = disabled
      18. ----
      19.  
      20. cp /usr/share/trac/cgi-bin/trac.wsgi /usr/share/trac/cgi-bin/tram.wsgi
      21. vi /usr/share/trac/cgi-bin/tram.wsgi
      22. ----
      23.     from tram.main import dispatch_request
      24. ----
      25.  
      26. vi /etc/httpd/conf.d/example.com.conf
      27. ----
      28. #        WSGIScriptAlias /projects /usr/share/trac/cgi-bin/trac.wsgi
      29.         WSGIScriptAlias /projects /usr/share/trac/cgi-bin/tram.wsgi
      30. ----
      31.  
      32. service httpd graceful

マイルストーンを色分け

trac-milestone-color.jpg

  • cssの編集
    vi /usr/share/trac/htdocs/css/roadmap.css
    ----
    table.progress td.red { background: #ffcccc }
    table.progress td.green { background: #ccff99 }
    table.progress td.lightgreen { background: #99ffcc }
    table.progress td.blue { background: #99ccff }
    table.progress td.yellow { background: #ffff99 }
    table.progress td.orange { background: #ffcc99 }
    table.progress td.violet { background: #cc99ff }
    ----
  • trac.iniの編集
    vi /usr/share/trac/conf/trac.ini
    ----
    [milestone-groups]
    closed = closed
    closed.label = closed/完了
    closed.order = 1
    closed.overall_completion = true
    closed.query_args = group=resolution
    verify = verify
    verify.css_class = yellow
    verify.label = verify/検証中
    verify.order = 2
    accepted = accepted,in_work
    accepted.css_class = red
    accepted.label = accepted/作業中
    accepted.order = 3
    assigned = assigned,reopened
    assigned.css_class = blue
    assigned.label = assigned/割当済
    assigned.order = 4
    new = new
    new.css_class = open
    new.label = new/未着手
    new.order = 5
    ----
    
    service httpd graceful

Trac Lightningにインストールされているプラグイン一覧

○を付けたプラグインをCentOS5.5環境に導入した

  • ExcelReportExport カスタムクエリ出力にExcel形式を追加
  • TracMacOSTheme MacOSテーマ。要ThemeEnginePlugin?
  • acct_mgr アカウントマネージャ
  • addcomment wikiにコメント入力欄を追加
  • advancedticketworkflow チケットタイプ毎にワークフローを設定できる
  • autowikifyplugin 日本語wikiページでもautolink
  • batchmodify カスタムクエリーで表示されたチケットを一括して属性を変更できる
  • completeuser 担当者入力欄に候補を表示
  • customfieldadmin カスタムフィールドを管理画面から編集可能
  • datefield 日付項目にカレンダー表示。decoratorがあれば不要
  • decorator 日付項目にカレンダー表示。見た目を派手に
  • discussion 掲示板機能
  • excelreport レポート出力にExcel形式を追加。trac本体の変更が必要
  • ganttcalendar ガントチャート機能を追加。trac0.11.5の場合はr706でないと動作しない。その後はtrac0.12専用?
  • graphvizplugin Graphviz形式で図を表示できるようになる
  • hudsontracplus Hudson と連携
  • iniadmin trac.iniを管理画面から編集可能
  • lightningtheme Trac Lightningテーマ。要ThemeEnginePlugin?
  • macropost addcommentに必要
  • mailarchiveplugin MLなどのメールを保管し、Tracにて表示・検索するためのプラグイン
  • masterticketsplugin チケットに親子関係を付けられる。子を全てcloseしないと親がclose出来ないように。
  • newwikipagebutton ページ下部に「新しいページを作成する」ボタンを追加
  • privatewikiplugin wikiページにアクセス制限を付ける
  • querychart バグ収束曲線やバーンダウンチャートを描画
  • scrumburndownplugin バーンダウンチャート。QueryChart?が有れば不要か
  • searchhyperestraier HyperEstraier?でリポジトリ内検索
  • sectioneditplugin 長いページでもセクション単位で編集できて便利
  • svnauthzadminplugin subversion認証ファイルを管理画面から編集できる。ユーザの追加の方法がわからない
  • themeengineplugin テーマ(見た目)を変更するプラグイン
  • ticketcloneチケットを複製
  • ticketimportpluginMS ExcelやCSVファイルからチケットのインポートをできるようにする
  • ticketsubmitpolicyplugin チケットの分類の条件により、余分な項目を非表示にしたり必須項目の入力チェックを行う
  • timingandestimationpluginチケットに、作業見積もり時間、実際にかかった時間、時間合計等を追加
  • tocmacro 見出し作成。デフォルトの`PageOutline?`と同じか
  • tracavatarpluginアバター機能
  • tracdragdroppluginドラッグ&ドロップでファイル添付。Firefox 3.6+, Google Chrome 4+に対応
  • tracmsofficexmlpluginレポート、カスタムクエリをExcel HTML, Excel XMLでエクスポートできるように
  • tracnav wikiの上部にショートカットを表示するマクロ
  • subticketspluginサブチケットに対応
  • tractags タグ付け
  • tracwysiwyg wiki記法をwordのようなGUIと切り替えられるように
  • usermanagerグループやユーザーのパスワードやプロフィールなどを管理するためのプラグイン。「AccountManagerPlugin?」の拡張機能
  • workfloweditorplugin ワークフローを管理画面から編集
  • xdocviewxdoc2txtを使ってリポジトリビューワーのプレビューでwordやexcel等を表示。Windows専用。
  • xmlrpcplugin XML RPCを追加。ExcelTracAddIn?, Mylyn, 等で使用

日付フォーマットの変更

  1. cat > /tmp/ticket.html.patch << 'EOS'
  2. --- ticket/templates/ticket.html
  3. +++ mod/ticket.html
  4. @@ -146,8 +146,8 @@
  5.          <div id="ticket" py:if="ticket.exists or preview_mode"
  6.            class="${preview_mode and 'ticketdraft' or None}">
  7.            <div class="date">
  8. -            <p py:if="ticket.exists">登録: ${dateinfo(ticket.time_created)} 前</p> <!--! FIXME: message_contains_tag -->
  9. -            <p py:if="ticket.time_changed != ticket.time_created">最終更新: ${dateinfo(ticket.time_changed)} 前</p> <!--! FIXME: message_contains_tag -->
  10. +            <p py:if="ticket.exists">登録: ${format_datetime(ticket.time_created)}(${dateinfo(ticket.time_created)}前)</p> <!--! FIXME: message_contains_tag -->
  11. +            <p py:if="ticket.time_changed != ticket.time_created">最終更新: ${format_datetime(ticket.time_changed)} (${dateinfo(ticket.time_changed)}前)</p> <!--! FIXME: message_contains_tag -->
  12.              <p py:if="not ticket.exists"><i>${_('(ticket not yet created)')}</i></p>
  13.            </div>
  14.            <!--! use a placeholder if it's a new ticket -->
  15. @@ -240,7 +240,7 @@
  16.                      &#160;
  17.                    </span>
  18.                    <!--! FIXME: message_contains_tag -->
  19. -                  更新者: ${authorinfo(change.author)} (${dateinfo(change.date)} 前)
  20. +                  更新者: ${authorinfo(change.author)}  ${format_datetime(change.date)} (${dateinfo(change.date)} 前)
  21.                  </h3>
  22.                  <div py:if="'cnum' in change and can_append" class="inlinebuttons">
  23.                    <input type="hidden" name="replyto" value="${change.cnum}" />
  24. EOS
  25.  
  26. cat > /tmp/query_results.html.patch << 'EOS'
  27. --- ticket/templates/query_results.html  2009-03-10 04:26:18.000000000 +0900
  28. +++ ticket/templates/query_results.html  2011-04-26 21:41:12.000000000 +0900
  29. @@ -62,7 +62,7 @@
  30.                      <td py:when="name == 'id'" class="id"><a href="$result.href" title="${_('View ticket')}" class="${classes(closed=result.status == 'closed')}">#$result.id</a></td>
  31.                      <td py:otherwise="" class="$name" py:choose="">
  32.                        <a py:when="name == 'summary'" href="$result.href" title="${_('View ticket')}">$value</a>
  33. -                      <py:when test="isinstance(value, datetime)">${dateinfo(value)}</py:when>
  34. +                      <py:when test="isinstance(value, datetime)">${format_date(value)} (${dateinfo(value)})</py:when>
  35.                        <py:when test="name == 'reporter'">${authorinfo(value)}</py:when>
  36.                        <py:when test="name == 'cc'">${format_emails(ticket_context, value)}</py:when>
  37.                        <py:when test="name == 'owner' and value">${authorinfo(value)}</py:when>
  38. @@ -79,7 +79,7 @@
  39.                    <td colspan="${len(headers)}">
  40.                      <!--! FIXME: message_contains_tag -->
  41.                      <p class="meta">${_('Reported by')} <strong>${authorinfo(result.reporter)}</strong>,
  42. -                      ${dateinfo(result.time)}前.</p>
  43. +                      ${format_date(result.time)} (${dateinfo(result.time)}前.)</p>
  44.                    </td>
  45.                  </tr>
  46.                  <py:choose>
  47. EOS
  48.  
  49. cd /usr/lib/python2.4/site-packages/Trac-0.11.5.ja1-py2.4.egg/trac/ticket/templates/
  50. patch -p2 < /tmp/ticket.html.patch
  51. patch -p2 < /tmp/query_results.html.patch

TracReport?

wikiやマイルストーンにマクロの形で埋め込む事ができる


編集内容に、IPアドレス、メールアドレスの表示

  • Trac0.11以降、メールアドレスが隠れるようになったので、それを表示するオプション
    1. vi /usr/share/trac/conf/trac.ini
    2. ----
    3. [trac]
    4. show_email_addresses = true
    5. show_ip_addresses = true
    6. ----
    7. # service httpd graceful

TortoiseSVN等でのコミット時にメッセージ等を表示する

    1. bugtraq:append           false
    2. bugtraq:label            Ticket ID
    3. bugtraq:message          refs #%BUGID%
    4. bugtraq:url              http://example.com/trac/sandbox/ticket/%BUGID%
    5. bugtraq:warnifnoissue    true

ページ毎のアクセス制御

  • mod_authz_svn ライクなアクセス制御ファイルを使う。TracFineGrainedPermissions The Trac Project 参照
    • trac.iniに追加
      1. [trac]
      2. authz_file = /path/to/.tracaccess
    • /path/to/.tracaccess
      1. * = r
      2. [/branches/calc/bug-142]
      3. harry = rw
      4. sally = r
      5. [/branches/calc/bug-142/secret]
      6. harry =

リビジョンツリー


改ページを入れる

  • 印刷したい時に、任意の箇所で改ページを入れる。Trac 0.11.5.ja1、Firefox 3.6で確認。
    <hr style="page-break-after: always;" />

Googleカレンダー表示プラグイン

trac v0.11で、Googleカレンダーをwikiに表示させたい。

  • 生のhtmlを表示する構文はあるが、サニタイズされてしまい何も表示されない
    <iframe src="http://www.google.com/calendar/ ...></iframe>
  • 共通pluginディレクトリにいれても、.pyだけ動かないのでシンボリックリンクを張る。googleカレンダーのURLかをチェックしているが、違った場合何を返せばいいのかわからない。空文字を返すと、プラグインが無いという表示がでる。
    • fileGoogleCalendar.py
      # mv GoogleCalendar.py /usr/share/trac/plugins/
      # ln -s /usr/share/trac/plugins/GoogleCalendar.py /var/www/trac/SandBox/plugins/GoogleCalendar.py
    • 使い方
      [[GoogleCalendar(<iframe src="http://www.google.com/calendar/ ...></iframe>)]]
  • 限定公開URLを利用する方法(特定ユーザのみと共有したい場合)
    • マイカレンダーの下矢印をクリック -> このカレンダーを共有 -> カレンダー情報タブ -> 限定公開URLで「HTML」をクリック
    • 出てきたURLを以下src="..."に埋め込む
      [[GoogleCalendar(<iframe src="..." style=" border-width:0 " width="800" height="600" frameborder="0" scrolling="no"></iframe>)]

添付ファイルに直接リンク

HTMLプレビューをせずに直接ファイルにリンクする

  • trac 0.11で確認。0.9の頃には無かった気がする。
    raw-attachment:ファイル名

trac0.11で通知メールのTicket URLが不完全

  • 不完全な通知メールのURL
    Ticket URL: </ticket/7#comment:4>
  • project毎に[trac]セクションにbase_urlを設定すると直る
    [trac]
    base_url = https://example.com/projects/SandBox

Database is Locked エラー

  • すぐ解消するにはapacheの再起動
    # service httpd graceful
  • pysqliteのバージョンをv2.0.5以上にすると良い。1ヶ月以上発生せず
  • Troubleshooting: Locking Database Errors
    • スレッドセーフオプション(--enable-threadsafe)を付けて、SQLiteをインストールしなおすと良いらしい。
    • CentOS5.3(sqlite-3.3.6-5.src.rpm)の specファイルを見たら、3.2.8-1以上は、--enable-threadsafeが付いてるみたい。
      * Tue Jan 24 2006 Paul Nasrat <pnasrat@redhat.com> - 3.2.8-1
      - Add --enable-threadsafe (Nicholas Miell)
      - Update to 3.2.8
    • sqlite-3.3.6-2.rpmでも、lockが発生しているので、これでも防げないのかな。
  • TRAC_DB_POOL_SIZEのデフォルトが10なので、100くらいまで増やせば良いらしい。
    • 以下の対策をしてもまだ同じエラーがでました。
    • ソース直接編集
      # vi /usr/lib/python2.4/site-packages/Trac-0.11.5.ja1-py2.4.egg/trac/db/pool.py
      ----
      _pool_size = int(os.environ.get('TRAC_DB_POOL_SIZE', 10))
      ----
    • 環境変数で指定
      • mod_python
        PythonOption TRAC_DB_POOL_SIZE 100
      • mod_fcgid
        # vi trac.fcgi
        ----
        import os
        os.environ['TRAC_ENV_PARENT_DIR'] = '/var/www/trac'
        os.environ['TRAC_DB_POOL_SIZE'] = '100'
        ----
      • cgi
        SetEnv TRAC_DB_POOL_SIZE 100

trac-post-commit-hookから、ticket_customへのアクセス

  • チケットのデフォルト項目は「ticket['status'] = 'closed'」などで更新できるようですが、ticket_customの項目は変更できませんでした。
  • 以下の方法でticket_customを更新できました。
    ticket.values['カスタム項目名'] = 値
    ticket.values['hours'] = 1
  • pythonはよく知りませんが、ソースを追って「Trac-0.11.5.ja1/trac/ticket/model.py」を参考にしました。
    def _fetch_ticket
      ...
      self.values[name] = value

コミットログに作業時間を入力するとtracに反映

  • 変更点
    • 「re #1」の時にステータスがnewの場合は、assignedに変更し、担当者をコミットユーザに変更
    • コマンド 「hour」を追加
      • hour #チケット番号 今日の作業時間
      • hours #チケット番号 今日の作業時間
      • 例:hour #1 1

trac0.11のワークフローを視覚化

  • Trac-0.11.5.ja1/sample-plugins/workflow/enterprise-review-workflow.ini
    trac0.11-enterprise.png
  • trac0.11.5-jaで新規作成
    trac0.11.5-ja_workflow.png
  • trac0.10.5-jaで新規作成
    trac0.10.5-ja_workflow.png
  • インストール
    # yum install graphviz graphviz-gd
  • utf対応パッチ
    --- workflow_parser.py     2009-09-09 19:12:18.000000000 +0900
    +++ workflow_parser.py  2009-09-09 19:13:15.000000000 +0900
    @@ -9,6 +9,8 @@
     from trac.config import Configuration
     from trac.ticket.default_workflow import parse_workflow_config
     
    +import locale, codecs
    +
     _debug = True
     def debug(s):
         if _debug:
    @@ -75,6 +77,7 @@
         digraph_lines = actions2graphviz(actions, show_ops, show_perms)
     
         # And output
    +    sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout);
         sys.stdout.write(''.join(digraph_lines))
     
     def usage(output):
    
  • 使用してみる
    $ cd /usr/local/src/Trac-0.11.5.ja1/contrib/workflow
    $ ./workflow_parser.py /var/www/trac/sandbox/conf/trac.ini > trac.dot
    $ dot -T png -Nfontname=kochi-gothic-subst -Efontname=kochi-gothic-subst < trac.dot > trac.png
    
    もしくは
    $ vi trac.dot
    ----
    digraph G {
    node [fontname="kochi-gothic-subst"]
    edge [fontname="kochi-gothic-subst"]
    ...
    }
    ----
    

高速化

  • decoratorプラグインの高速化
    • Trac月のプラグインを全部入れてみる(その1) - World Wide Wonderful
      1. cp -r /var/www/trac/.egg-cache/TracDecoratorPlugin-0.3.1-py2.4.egg-tmp/decorator/htdocs /var/www/vhost/example.com/trac_common/decorator
      2.  
      3. cd /usr/lib/python2.4/site-packages/Trac-0.11.5.ja1-py2.4.egg/trac/web/
      4. cp chrome.py chrome.py.default
      1. --- chrome.py.default   2011-04-22 16:43:55.000000000 +0900
      2. +++ chrome.py   2011-04-22 16:45:09.000000000 +0900
      3. @@ -78,6 +78,8 @@
      4.      if filename.startswith('common/') and 'htdocs_location' in req.chrome:
      5.          href = Href(req.chrome['htdocs_location'])
      6.          filename = filename[7:]
      7. +    elif filename.startswith('decorator/') and 'htdocs_location' in req.hdf:
      8. +        href = Href(req.hdf['htdocs_location'])
      9.      else:
      10.          href = req.href
      11.          if not filename.startswith('/'):
      12. @@ -98,6 +100,8 @@
      13.      if filename.startswith('common/') and 'htdocs_location' in req.chrome:
      14.          href = Href(req.chrome['htdocs_location'])
      15.          path = filename[7:]
      16. +    elif filename.startswith('decorator/') and 'htdocs_location' in req.hdf:
      17. +        href = Href(req.hdf['htdocs_location'])
      18.      else:
      19.          href = req.href
      20.          if not filename.startswith('/'):

CentOS5でFastCGIを使う


一つのサーバで複数バージョンのTracを使用する方法


TraMプラグイン Trac0.11対応版

  • 古いTraMのアンインストール
    rm -rf /usr/lib/python2.4/site-packages/TraM-0.2-py2.4.egg
  • インストール
    cd /usr/local/src/
    svn export http://svn.sourceforge.jp/svnroot/shibuya-trac/plugins/TraM/branches/genshi-ja tram-ja
    cd tram-ja
    python setup.py install
    
    vi /usr/share/trac/conf/trac.ini
    ----
    [components]
    tramplugin.* = enabled
    ----
    
    vi /var/www/trac/all/conf/trac.ini
    ----
    [components]
    trac.ticket.report.* = disabled
    trac.ticket.web_ui.newticket = disabled
    ganttcalendar.* = disabled
    ----
    
    vi /etc/httpd/conf.d/example.com.conf
    ----
              PythonHandler tram.modpython_frontend
    #        PythonHandler trac.web.modpython_frontend
    ----
    
    service httpd graceful

make_obcallback: could not import mod_python.apache.

  • CentOS5.3、trac-0.10.5-ja-1.zipで以下のエラー発生
  • エラー
    [Tue Sep 01 15:29:49 2009] [error] make_obcallback: could not import mod_python.apache.\n
    [Tue Sep 01 15:29:49 2009] [error] python_handler: no interpreter callback found.
    [Tue Sep 01 15:29:49 2009] [error] [client 192.168.1.11] python_handler: Can't get/create interpreter.
    
  • mod_pythonを再インストールしたら直った
    # yum remove mod_python
    # yum install mod_python
    # service httpd restart
  • 同じく、clearsilverがインストールされていないと言われたら、python-clearsilverを再インストールしたら直った
    # rpm -e python-clearsilver
    # yum install python-clearsilver
    

TraM+TracWholeSearch?でマルチプロジェクト横断検索

TraMプラグインを使用していますが、マルチプロジェクトの検索ができません。
Trac Whole Search がTrac0.11に対応しました。 - almost nearly deadプラグインはAJAXで複数プロジェクトの検索ができるようです。
そのままだと、tramのリンクも拾ってしまうので改造しました。

  1. 展開とインストール
    # wget -O trunk.tar.gz "http://svn.sourceforge.jp/view/plugins/TracWholeSearch/trunk.tar.gz?root=shibuya-trac&view=tar"
    # tar xvfz trunk.tar.gz
    # mv trunk/search /var/www/html/
    # chown -R 適当なユーザ /var/www/html/search
  2. 変更点
  3. 適用
    $ cd search
    $ patch < TracWholeSearch0.21.patch
  4. TraMのテンプレートの適当な位置に追加
    # vi /usr/lib/python2.3/site-packages/TraM-0.1-py2.3.egg/tram/templates/project_list.cs
    ----
    <p><a href="/search/" title="プロジェクト横断検索">プロジェクト横断検索</a></p>
    ----

プラグインのアンインストール

アンインストーラが用意されてない場合のメモ。

  • hierwikipluginの場合
    # python
    >>> import hierwiki
    >>> print hierwiki.__file__
    /usr/lib/python2.4/site-packages/TracHierWiki-1.0-py2.4.egg/hierwiki/__init__.pyc
    >>> CTRL+D
    
    # rm -Rf /usr/lib/python2.4/site-packages/TracHierWiki-1.0-py2.4.egg
    # service httpd graceful
    

wikiページのPDF化はまだ未定

現在 trac-hacks には2つプラグインが登録されているが、いずれも htmldoc を使用しており、これが日本語(UTF-8)に対応していない。現在は 1.8.27。1.9のロードマップではペンディングになっている

シンタックスハイライトの有効化

  • プログラムの確認
    $ rpm -qa | grep -i enscript
    enscript-1.6.1-28.0.4
    
    # rpm -qa | grep -i SilverCity
    
    # whereis enscript
    enscript: /usr/bin/enscript
    
    # whereis php
    php: /usr/bin/php
  • phpの色づけにSilverCity?が必要なので、インストール。
    • 最新は、0.9.7だが問題があるようだ。 0.9.5推奨らしい。 http://d. --inherit=/usr/share/trac/conf/trac.ini trac-admin /var/www/trac/SandBox initenv 登録: ${format_datetime(ticket.time_created)}(${dateinfo(ticket.time_created)}前)hatena.ne.jp/shzm/20060404
  • インストールする
    • ソースから
      # wget http://nchc.dl.sourceforge.net/sourceforge/silvercity/SilverCity-0.9.5.tar.gz
      # tar xvfz SilverCity-0.9.5.tar.gz
      # cd SilverCity-0.9.5
      # python setup.py build
      # python setup.py install
    • アンインストールする場合
      rm -rf /usr/lib/python2.3/site-packages/SilverCity
      rm /usr/bin/source2html.py 
      rm /usr/bin/cgi-styler.py 
      rm /usr/bin/cgi-styler-form.py 
      
  • 共通設定ファイルに追加
    # vi /usr/share/trac/conf/trac.ini
    ----
    [mimeviewer]
    php_path = /usr/bin/php
    enscript_path = /usr/bin/enscript
    tab_width = 8
    max_preview_size = 262144
    enscript_modes = text/x-dylan:dylan:4,text/x-php:php:4
    silvercity_modes =
    mime_map = text/x-dylan:dylan,text/x-idl:ice,text/x-ada:ads:adb, text/x-php:php
    ----
    # service httpd graceful
  • 既存プロジェクトに[mimeviewer]の設定はあり、その値で上書されるため共通設定は反映されない項目もある。コメントアウトすればよい。
  • html
    {{{
    #!text/html
    <html>
    <body>
    <!-- コメント -->
    <a href="http://www.google.co.jp/">Google<a/>
    </body>
    </html>
    }}}
  • php
    {{{
    #!php
    <?php
    // コメント
    print "Hello World.";
    ?>
    }}}
    

Trac 0.10.4 で 「NoSuchChangeset?: No changeset ?? in the repository」

Trac 0.10.4でTraMプラグインを入れたところ、以下のようなエラーが出た。が、これはどうもTrac本体がよくないようだ。

Trac本家を検索すると、同じ症状のチケットがあったので、r5612を当てる。一応、エラーは出なくなった。修正内容はtrac 0.10.5に含まれる模様。

  • エラー
    Traceback (most recent call last):
      File "/usr/lib/python2.3/site-packages/TraM-0.1-py2.3.egg/tram/main.py", line 252, in dispatch_request
        dispatcher.dispatch(req)
      File "/usr/lib/python2.3/site-packages/trac/web/main.py", line 191, in dispatch
        chosen_handler = self._pre_process_request(req, chosen_handler)
      File "/usr/lib/python2.3/site-packages/trac/web/main.py", line 263, in _pre_process_request
        chosen_handler = f.pre_process_request(req, chosen_handler)
      File "/usr/lib/python2.3/site-packages/trac/versioncontrol/api.py", line 73, in pre_process_request
        self.get_repository(re
  1. q.authn width=ame).sync()
      File "/usr/lib/python2.3/site-packages/trac/versioncontrol/cache.py", line 102, in sync
        self.youngest = self.repos.normalize_rev(self.youngest)
      File "/usr/lib/python2.3/site-packages/trac/versioncontrol/svn_fs.py", line 312, in normalize_rev
        raise NoSuchChangeset(rev)
    NoSuchChangeset: No changeset 38 in the repository
  • http://trac.edgewall.org/ticket/5449
    # cd /usr/local/src/trac-0.10.4-ja-1/trac/versioncontrol/
    # wget -O cache.py.r5612 http://trac.edgewall.org/changeset/5612?format=diff&new=5612
    # patch < cache.py.r5612
    # python
    ----
    >>> import cache
    >>> [CTRL+D]で終了
    ----
    # cp cache.py{,c} /usr/lib/python2.3/site-packages/trac/versioncontrol/
    # service httpd graceful

ParentWiki?.pyでページ名に全角文字が含まれるとエラー

Trac 0.10.xからページ名に全角文字が含まれると、ParentWiki?.pyがエラーを出すので、パッチを作成してみました。util.escape()でエスケープする必要があるようです。

  • Wikipage /SandBox/wiki/テスト/SubPage?
    • contents
      [[ParentWiki]]
  • error
    Error: Macro ParentWiki(None) failed
    asciiテスト01ordinal not in range(128)

TraMプラグインでパーミッションを持つプロジェクトのみを表示

Trac0.9用のTraMでは、ログインユーザによらず全てのプロジェクトが表示されていました。
これでは、プロジェクト名すら見せたくないものがあった場合に問題でした。

Trac0.10用のTraM中のソースを何気なく読んだところ、ユーザのパーミッションによって表示を制限できるようです。

  • trac.iniで[tram]セクションにcheck_auth=trueを追加する。この状態だと、TRAC_ADMIN権限をもつプロジェクトのみ表示される模様
  • さらに、permission=でパーミッションを指定すると、特定の権限を持つプロジェクトのみ表示される。
  • TraM.jpg
# svn co https://svn.rectang.com/tram/trunk
# cd trunk/
# python setup.py install
# vi /usr/share/trac/conf/trac.ini
----
[components]
tramplugin.* = enabled

[tram]
check_auth=true
permission=WIKI_VIEW
----
# vi /var/trac/all/conf/trac.ini
----
[components]
trac.ticket.report.* = disabled
trac.Search.* = disabled
trac.Timeline.* = disabled
trac.ticket.web_ui.NewticketModule = disabled
trac.Settings.SettingsModule = disabled
webadmin.* = disabled
acct_mgr.* = disabled
----
# vi /etc/httpd/conf.d/trac.conf
----
<Location /projects>
  SetHandler mod_python
#  PythonHandler trac.web.modpython_frontend
  PythonHandler tram.modpython_frontend
  PythonOption TracEnvParentDir /var/trac
  PythonOption TracUriRoot /projects
  SetEnv PYTHON_EGG_CACHE /var/www/.python-eggs

  # Require SSL connection for password protection.
  SSLRequireSSL
</Location>

#<LocationMatch "/projects/[^/]+/login">
<LocationMatch "/projects/">
  AuthType Basic
  AuthName "Trac"
  AuthUserFile /var/svn/.htpasswd
  Require valid-user
</LocationMatch>
----
# service httpd restart

プロジェクト一覧用テンプレート

標準のプロジェクト一覧画面が味気ないので、それらしく見せるテンプレート。
※/projects/SandBox が必ずあると仮定してますので、それ以外の場合は書き換える必要あり。
TraMプラグインの方が多機能。

  • Trac 0.10.3
    • /usr/share/trac/templates/index.cs
      fileindex.cs

資料/リンク

  • Shibuya.trac: 概要 - SourceForge.JP
    • Shibuya.tracは、Trac/Trac月 Offを受けて発足したTracの情報交換を行うためのコミュニティです。Tracに関する技術的なディスカッション、利用する際の悩み相談、呑み会、カンファレンスの企画、開催を行います。


「かくにん」を漢字で入力して下さい。1文字目が「たしかめる」で2文字目が「みとめる」です。

添付ファイル: filetrac-post-commit-hook.0.11.patch 835件 [詳細] filetrac-milestone-color.jpg 857件 [詳細] fileGoogleCalendar.py 1051件 [詳細] filetrac-post-commit-hook.trac0.11.patch 1690件 [詳細] filetrac0.11-enterprise.png 1218件 [詳細] filetrac0.10.5-ja_workflow.png 964件 [詳細] filetrac0.11.5-ja_workflow.png 1009件 [詳細] fileTracWholeSearch0.21.patch 1593件 [詳細] fileParentWiki.py 1211件 [詳細] fileTraM.jpg 1302件 [詳細] fileindex.cs 4592件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-08-12 (月) 13:56:11 (1774d)