Nov 12, 2007
[Trac] Trac で画像のプレビューが表示されない
「Trac で画像のプレビューが表示されないのだけれど・・・」という相談を受けた。 で、調べた結果をメモ。
症状の内容
Trac Wiki の添付アップロード画面(ex. http://example.com/trac/attachment/wiki/WikiStart?action=new) や添付ファイル表示画面(ex. http://example.com/trac/attachment/wiki/WikiStart/photo.jpg) で、以下のエラーメッセージが表示され画像のプレビューが表示されない。
HTML preview not available, since the file size exceeds 262144 bytes. You may download the file instead.
回避方法
trac.ini の mimeviewer セクションに max_preview_size という設定項目があるので、それを変更。 デフォルトでは 262144 になっているので、適当な値 (1Mbyte の場合は 1048576) にするだけ。
[mimeviewer] enscript_modes = text/x-dylan:dylan:4 enscript_path = enscript max_preview_size = 262144 mime_map = text/x-dylan:dylan,text/x-idl:ice,text/x-ada:ads:adb
補足
trac.ini の max_preview_size を変更する前にアップロードしてプレビューが表示されていない画像は、 max_preview_size を変更してもプレビューは表示されない模様。詳しく調べていないので断定はできないけれど。 その場合は再度添付作業をやり直す必要がある。
Jul 30, 2007
[Trac] 既存の Trac 0.9 のデータを Trac 0.10 に移行する
既存の Trac 0.9 環境を Trac 0.10 に移行したときの作業メモ。
yum でインストールして、trac-admin で既存データの upgrade を行うだけ。
# yum update trac.noarch
Loading "installonlyn" plugin
Setting up Update Process
Setting up repositories
(SNIP)
Updated: trac.noarch 0:0.10.3.1-2.fc5
Complete!
# trac-admin /home/trac/myproject hotcopy /home/trac/myproject.backup
Hotcopying /home/trac/myproject to /home/trac/myproject.20070801 ... Hotcopy done.
# trac-admin /usr/local/beattrac upgrade --no-backup
Upgrade done.
# trac-admin /usr/local/beattrac wiki upgrade
/usr/share/trac/wiki-default/TracGuide => TracGuide
TracGuide already up to date.
/usr/share/trac/wiki-default/TracBackup => TracBackup
/usr/share/trac/wiki-default/TracRoadmap => TracRoadmap
/usr/share/trac/wiki-default/TracIni => TracIni
/usr/share/trac/wiki-default/TracAccessibility => TracAccessibility
/usr/share/trac/wiki-default/TracUnicode => TracUnicode
/usr/share/trac/wiki-default/TracInstall => TracInstall
/usr/share/trac/wiki-default/TracEnvironment => TracEnvironment
/usr/share/trac/wiki-default/InterMapTxt => InterMapTxt
/usr/share/trac/wiki-default/TracQuery => TracQuery
/usr/share/trac/wiki-default/TracReports => TracReports
/usr/share/trac/wiki-default/TitleIndex => TitleIndex
TitleIndex already up to date.
/usr/share/trac/wiki-default/TracTicketsCustomFields => TracTicketsCustomFields
/usr/share/trac/wiki-default/WikiPageNames => WikiPageNames
/usr/share/trac/wiki-default/TracUpgrade => TracUpgrade
/usr/share/trac/wiki-default/TracRss => TracRss
/usr/share/trac/wiki-default/RecentChanges => RecentChanges
RecentChanges already up to date.
/usr/share/trac/wiki-default/WikiProcessors => WikiProcessors
/usr/share/trac/wiki-default/TracSyntaxColoring => TracSyntaxColoring
/usr/share/trac/wiki-default/TracPlugins => TracPlugins
/usr/share/trac/wiki-default/TracPermissions => TracPermissions
/usr/share/trac/wiki-default/TracChangeset => TracChangeset
/usr/share/trac/wiki-default/TracRevisionLog => TracRevisionLog
/usr/share/trac/wiki-default/TracFastCgi => TracFastCgi
/usr/share/trac/wiki-default/TracTickets => TracTickets
/usr/share/trac/wiki-default/TracLogging => TracLogging
TracLogging already up to date.
/usr/share/trac/wiki-default/WikiFormatting => WikiFormatting
/usr/share/trac/wiki-default/TracLinks => TracLinks
/usr/share/trac/wiki-default/TracTimeline => TracTimeline
/usr/share/trac/wiki-default/TracSearch => TracSearch
/usr/share/trac/wiki-default/CamelCase => CamelCase
/usr/share/trac/wiki-default/TracBrowser => TracBrowser
/usr/share/trac/wiki-default/TracImport => TracImport
/usr/share/trac/wiki-default/WikiHtml => WikiHtml
/usr/share/trac/wiki-default/TracWiki => TracWiki
/usr/share/trac/wiki-default/TracCgi => TracCgi
/usr/share/trac/wiki-default/TracStandalone => TracStandalone
/usr/share/trac/wiki-default/WikiMacros => WikiMacros
/usr/share/trac/wiki-default/TracInterfaceCustomization => TracInterfaceCustomization
/usr/share/trac/wiki-default/TracModPython => TracModPython
/usr/share/trac/wiki-default/WikiRestructuredTextLinks => WikiRestructuredTextLinks
/usr/share/trac/wiki-default/TracNotification => TracNotification
/usr/share/trac/wiki-default/TracSupport => TracSupport
/usr/share/trac/wiki-default/WikiRestructuredText => WikiRestructuredText
/usr/share/trac/wiki-default/InterWiki => InterWiki
/usr/share/trac/wiki-default/TracAdmin => TracAdmin
/usr/share/trac/wiki-default/SandBox => SandBox
SandBox already up to date.
/usr/share/trac/wiki-default/WikiNewPage => WikiNewPage
/usr/share/trac/wiki-default/WikiDeletePage => WikiDeletePage
/usr/share/trac/wiki-default/InterTrac => InterTrac
#
Jul 26, 2007
[Trac] 静的リソースの trac.ini での指定方法
Trac の静的リソースには、個々の Trac インスタンス毎のものと、同一サーバ上の全 Trac から参照されるものの二種類がある。 それぞれストレージ上の設置場所が異なるので、trac.ini では指定方法をかえなければならない。 今回はロゴを変更したかったので、Trac インスタンス単位のリソースとして画像を設置してみた。
静的リソースの trac.ini での指定方法
- Trac インスタンス毎のリソース
- ストレージの "/usr/share/trac/htdocs/" が trac.ini の "common/" に相当する。
- 全 Trac から参照されるのリソース
- ストレージの "$TRAC_ENVIRONMENT_HOME/htdocs/" が trac.ini の "site/" に相当する。
http://www.example.com/trac/wiki/TracInterfaceCustomization
Change the src setting to site/ followed by the name of your image file. The width and height settings should be modified to match your image's dimensions (the Trac chrome handler uses "site/" for files within the project directory htdocs and "common/" for the common ones).
ロゴの登録方法
$TRAC_ENVIRONMENT_HOME/htdocs/logo.png という名前でロゴ画像を設置し、trac.ini に
を指定する。[header_logo] height = -1 link = site/logo.png
Jul 20, 2007
[Trac] Trac チケット起票時の "Assign to" フィールドをコンボボックス化する
Trac のチケットを起票する際、デフォルトでは "Assign to" フィールドは TextField になっている。 そのため、担当者のアカウント名を調べて入力するという作業が必要になる。 これが意外と面倒なので、"Assign to" を選択式に設定してみた。
設定方法
設定は非常に簡単。 $TRAC_HOME/myproject/conf/trac.ini の [ticket] セクションにある restrict_owner を false → true に変更するだけ。 この設定はデフォルトで false になっている。
[ticket] restrict_owner = true
詳細情報
Trac の Help から関連情報を転載。 コンボボックスにプロジェクトメンバーが表示されない場合、下記の通り当該メンバーに Setting の変更などを行ってもらい、Trac セッションを作成する必要がある。
Assign-to as Drop-Down List
If the list of possible ticket owners is finite, you can change the assign-to ticket field from a text input to a drop-down list. This is done by setting the restrict_owner option of the [ticket] section in trac.ini to “true”. In that case, Trac will use the list of all users who have logged in and set their email address to populate the drop-down field.
To appear in the dropdown list, a user needs be registered with the project, i.e. a user session should exist in the database. Such an entry is automatically created in the database the first time the user submits a change in the project, for example when editing the user's details in the Settings page. Also, the user must have TICKET_MODIFY permissions.
Jul 19, 2007
[Trac] Trac の XML-RPC API にチャレンジ
- Trac XML-RPC Plugin
- http://trac-hacks.org/wiki/XmlRpcPlugin
- root/xmlrpcplugin/0.10/tracrpc/api.py
- http://trac-hacks.org/browser/xmlrpcplugin/0.10/tracrpc/api.py
Trac 0.10.3 の XML-RPC API
Trac XML-RPC Plugin を導入すると、http://example.com/mytrac/xmlrpc (Trac のトップ画面の URL に /xmlrpc を付加する)で API を閲覧することができる。 Trac 0.10.3 に 0.10 用の XML-RPC Plugin を導入した環境では下記の API が使用できる。
wiki-
Function Description Permission required struct wiki.getRecentChanges(dateTime.iso8601 since) Get list of changed pages since timestamp WIKI_VIEW int wiki.getRPCVersionSupported() Returns 2 with this version of the Trac API. WIKI_VIEW string wiki.getPage(string pagename, int version=None) Get the raw Wiki text of page, latest version. WIKI_VIEW string wiki.getPageVersion(string pagename, int version=None) Get the raw Wiki text of page, latest version. WIKI_VIEW string wiki.getPageHTML(string pagename, int version=None) Return page in rendered HTML, latest version. WIKI_VIEW string wiki.getPageHTMLVersion(string pagename, int version=None) Return page in rendered HTML, latest version. WIKI_VIEW array wiki.getAllPages() Returns a list of all pages. The result is an array of utf8 pagenames. WIKI_VIEW struct wiki.getPageInfo(string pagename, int version=None) Returns information about the given page. WIKI_VIEW struct wiki.getPageInfoVersion(string pagename, int version=None) Returns information about the given page. WIKI_VIEW boolean wiki.putPage(string pagename, string content, struct attributes) writes the content of the page. WIKI_CREATE array wiki.listAttachments(string pagename) Lists attachments on a given page. WIKI_VIEW base64 wiki.getAttachment(string path) returns the content of an attachment. WIKI_VIEW boolean wiki.putAttachment(string path, base64 data) (over)writes an attachment. Returns True if successful.This method is compatible with WikiRPC. putAttachmentEx has a more extensive set of (Trac-specific) features. WIKI_MODIFY boolean wiki.putAttachmentEx(string pagename, string filename, string description, base64 data, boolean replace=True) Attach a file to a Wiki page. Returns the (possibly transformed) filename of the attachment. Use this method if you don't care about WikiRPC compatibility. WIKI_MODIFY boolean wiki.deleteAttachment(string path) Delete an attachment. WIKI_DELETE array wiki.listLinks(string pagename) Not implemented WIKI_VIEW string wiki.wikiToHtml(string text) Render arbitrary Wiki text as HTML. WIKI_VIEW
search - Search Trac.-
Function Description Permission required array search.getSearchFilters() Retrieve a list of search filters with each element in the form (name, description). SEARCH_VIEW array search.performSearch(string query, array filters=[]) Perform a search using the given filters. Defaults to all if not provided. Results are returned as a list of tuples in the form (href, title, date, author, excerpt). SEARCH_VIEW
ticket.milestone - Interface to ticket milestone objects.-
Function Description Permission required array ticket.milestone.getAll() Get a list of all ticket milestone names. TICKET_VIEW struct ticket.milestone.get(string name) Get a ticket milestone. TICKET_VIEW int ticket.milestone.delete(string name) Delete a ticket milestone TICKET_ADMIN int ticket.milestone.create(string name, struct attributes) Create a new ticket milestone with the given attributes. TICKET_ADMIN int ticket.milestone.update(string name, struct attributes) Update ticket milestone with the given attributes. TICKET_ADMIN
ticket.severity - Interface to ticket severity.-
Function Description Permission required array ticket.severity.getAll() Get a list of all ticket severity names. TICKET_VIEW string ticket.severity.get(string name) Get a ticket severity. TICKET_VIEW int ticket.severity.delete(string name) Delete a ticket severity TICKET_ADMIN int ticket.severity.create(string name, string value) Create a new ticket severity with the given value. TICKET_ADMIN int ticket.severity.update(string name, string value) Update ticket severity with the given value. TICKET_ADMIN
ticket.type - Interface to ticket type.-
Function Description Permission required array ticket.type.getAll() Get a list of all ticket type names. TICKET_VIEW string ticket.type.get(string name) Get a ticket type. TICKET_VIEW int ticket.type.delete(string name) Delete a ticket type TICKET_ADMIN int ticket.type.create(string name, string value) Create a new ticket type with the given value. TICKET_ADMIN int ticket.type.update(string name, string value) Update ticket type with the given value. TICKET_ADMIN
system - Core of the XML-RPC system.-
Function Description Permission required array system.multicall(array signatures) Takes an array of XML-RPC calls encoded as structs of the form (in a Pythonish notation here): {'methodName': string, 'params': array} XML_RPC array system.listMethods() This method returns a list of strings, one for each (non-system) method supported by the XML-RPC server. XML_RPC string system.methodHelp(string method) This method takes one parameter, the name of a method implemented by the XML-RPC server. It returns a documentation string describing the use of that method. If no such string is available, an empty string is returned. The documentation string may contain HTML markup. XML_RPC array system.methodSignature(string method) This method takes one parameter, the name of a method implemented by the XML-RPC server. It returns an array of possible signatures for this method. A signature is an array of types. The first of these types is the return type of the method, the rest are parameters. XML_RPC array system.getAPIVersion() Returns a list with two elements. First element is the major version number, second is the minor. Changes to the major version indicate API breaking changes, while minor version changes are simple additions, bug fixes, etc. XML_RPC
ticket.resolution - Interface to ticket resolution.-
Function Description Permission required array ticket.resolution.getAll() Get a list of all ticket resolution names. TICKET_VIEW string ticket.resolution.get(string name) Get a ticket resolution. TICKET_VIEW int ticket.resolution.delete(string name) Delete a ticket resolution TICKET_ADMIN int ticket.resolution.create(string name, string value) Create a new ticket resolution with the given value. TICKET_ADMIN int ticket.resolution.update(string name, string value) Update ticket resolution with the given value. TICKET_ADMIN
ticket.priority - Interface to ticket priority.-
Function Description Permission required array ticket.priority.getAll() Get a list of all ticket priority names. TICKET_VIEW string ticket.priority.get(string name) Get a ticket priority. TICKET_VIEW int ticket.priority.delete(string name) Delete a ticket priority TICKET_ADMIN int ticket.priority.create(string name, string value) Create a new ticket priority with the given value. TICKET_ADMIN int ticket.priority.update(string name, string value) Update ticket priority with the given value. TICKET_ADMIN
ticket.component - Interface to ticket component objects.-
Function Description Permission required array ticket.component.getAll() Get a list of all ticket component names. TICKET_VIEW struct ticket.component.get(string name) Get a ticket component. TICKET_VIEW int ticket.component.delete(string name) Delete a ticket component TICKET_ADMIN int ticket.component.create(string name, struct attributes) Create a new ticket component with the given attributes. TICKET_ADMIN int ticket.component.update(string name, struct attributes) Update ticket component with the given attributes. TICKET_ADMIN
ticket.version - Interface to ticket version objects.-
Function Description Permission required array ticket.version.getAll() Get a list of all ticket version names. TICKET_VIEW struct ticket.version.get(string name) Get a ticket version. TICKET_VIEW int ticket.version.delete(string name) Delete a ticket version TICKET_ADMIN int ticket.version.create(string name, struct attributes) Create a new ticket version with the given attributes. TICKET_ADMIN int ticket.version.update(string name, struct attributes) Update ticket version with the given attributes. TICKET_ADMIN
ticket - An interface to Trac's ticketing system.-
Function Description Permission required array ticket.query(string qstr="status!=closed") Perform a ticket query, returning a list of ticket ID's. TICKET_VIEW array ticket.getRecentChanges(dateTime.iso8601 since) Returns a list of IDs of tickets that have changed since timestamp. TICKET_VIEW array ticket.getAvailableActions(int id) Returns the actions that can be performed on the ticket. TICKET_VIEW array ticket.get(int id) Fetch a ticket. Returns [id, time_created, time_changed, attributes]. TICKET_VIEW int ticket.create(string summary, string description, struct attributes={}, boolean notify=False) Create a new ticket, returning the ticket ID. TICKET_CREATE array ticket.update(int id, string comment, struct attributes={}, boolean notify=False) Update a ticket, returning the new ticket in the same form as getTicket(). TICKET_APPEND int ticket.delete(int id) Delete ticket with the given id. TICKET_ADMIN struct ticket.changeLog(int id, int when=0) Return the changelog as a list of tuples of the form (time, author, field, oldvalue, newvalue, permanent). While the other tuple elements are quite self-explanatory, the permanent flag is used to distinguish collateral changes that are not yet immutable (like attachments, currently). TICKET_VIEW array ticket.listAttachments(int ticket) Lists attachments for a given ticket. Returns (filename, description, size, time, author) for each attachment. TICKET_VIEW base64 ticket.getAttachment(int ticket, string filename) returns the content of an attachment. TICKET_VIEW string ticket.putAttachment(int ticket, string filename, string description, base64 data, boolean replace=True) Add an attachment, optionally (and defaulting to) overwriting an existing one. Returns filename. TICKET_APPEND boolean ticket.deleteAttachment(int ticket, string filename) Delete an attachment. TICKET_ADMIN array ticket.getTicketFields() Return a list of all ticket fields fields. TICKET_VIEW
ticket.status - Interface to ticket status.-
Function Description Permission required array ticket.status.getAll() Get a list of all ticket status names. TICKET_VIEW string ticket.status.get(string name) Get a ticket status. TICKET_VIEW int ticket.status.delete(string name) Delete a ticket status TICKET_ADMIN int ticket.status.create(string name, string value) Create a new ticket status with the given value. TICKET_ADMIN int ticket.status.update(string name, string value) Update ticket status with the given value. TICKET_ADMIN
Java から Trac XML-RPC API にアクセスしてみる
試しに Java から Trac 上の Ticket を取得してみた。 ライブラリをインストールするのが面倒だったので、自前で HTTP コネクションを張っている。
サンプルコード
public void testTracApi() throws Exception {
URL url = new URL("http://example.com/trac/xmlrpc");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestMethod("POST");
con.addRequestProperty("content-type", "text/xml");
OutputStream os = null;
try {
os = con.getOutputStream();
String request =
"<methodCall>\n" +
" <methodName>ticket.get</methodName>\n" +
" <params>" +
" <param><value><int>3</int></value></param>" +
" </params>" +
"</methodCall>\n";
os.write(request.getBytes());
} finally {
if (os != null) {
os.close();
}
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream is = null;
try {
is = con.getInputStream();
int ch = 0;
while ((ch = is.read()) >= 0) {
baos.write(ch);
}
} finally {
if (is != null) {
is.close();
}
}
System.out.println("" + baos.toString("UTF-8"));
}
レスポンス
<?xml version='1.0'?> <methodResponse> <params> <param> <value><array><data> <value><int>3</int></value> <value><int>1179403566</int></value> <value><int>1179403566</int></value> <value><struct> <member> <name>status</name> <value><string>new</string></value> </member> <member> <name>description</name> <value><string>基本的な設定を行う。</string></value> </member> <member> <name>reporter</name> <value><string>et</string></value> </member> <member> <name>cc</name> <value><string></string></value> </member> <member> <name>resolution</name> <value><string></string></value> </member> <member> <name>component</name> <value><string>Continuum</string></value> </member> <member> <name>summary</name> <value><string>Continuum 設定</string></value> </member> <member> <name>priority</name> <value><string>major</string></value> </member> <member> <name>keywords</name> <value><string></string></value> </member> <member> <name>version</name> <value><string></string></value> </member> <member> <name>milestone</name> <value><string>[Continuum] M1</string></value> </member> <member> <name>owner</name> <value><string>me</string></value> </member> <member> <name>type</name> <value><string>task</string></value> </member> </struct></value> </data></array></value> </param> </params> </methodResponse>
May 17, 2007
[Trac] Mylar で Eclipse + Trac Ticket 連携にチャレンジ
Mylar とは
Eclipse Mylar Project によると、Mylar とは
Eclipse Mylar is a task-focused UI that reduces information overload and makes multi-tasking easy.というものだそうだ。要するに、Eclipse 上で Eclipse UI に従ってタスク管理をすることができるというプラグインのこと。 面白いのは、Trac 用の Mylar Connector が用意されていて、Trac 側で XML-RPC プラグインを用意しておくと Mylar で Trac のチケットを管理できるようになるということ。 Trac はチケットの上手な活用が肝になるので、Eclipse と連携できると便利。 ということで、早速試してみた。
- Eclipse Mylar
- http://www.eclipse.org/mylar/
- Trac XML-RPC プラグイン
- http://trac-hacks.org/wiki/XmlRpcPlugin
Trac XML-RPC プラグインのインストール
これは、上記の Trac XML-RPC プラグインのページに従ってインストール作業をすれば OK。
Eclipse Mylar のインストール
Eclipse 3.3M7 で Mylar のインストールを試してみた。
Mylar は Callisto の後継となる Europa に含まれているので、インストールは非常に簡単。
Subversion にも Mylar 用プラグインがあったので、ついでにインストールしておいたが、
何の役に立っているのか良くわかっていない(^^; まぁ、大は小を兼ねるということで。
![[Mylar インストール(1)]](/blog/entries/Trac/20070517_01/mylar_001.jpg)
Mylar は Europa でインストールできるので、Software Updates の機能を使用する。
![[Mylar インストール(2)]](/blog/entries/Trac/20070517_01/mylar_002.jpg)
"Search for new features to install" を選択して次へ。
![[Mylar インストール(3)]](/blog/entries/Trac/20070517_01/mylar_003.jpg)
今回は Mylar 関連のプラグインとして Europa に登録されている Mylar プラグインと Subclipseに含まれている Mylar プラグインをインストールするので、Europa と Subclipse にチェックして次へ。
![[Mylar インストール(4)]](/blog/entries/Trac/20070517_01/mylar_004.jpg)
Mylar 関連のプラグインをチェックして次へ。図では全て選択してあるが、Connector は必要なものだけで良い。例えば、Trac にしか接続しないのであれば、Trac Connector だけ選択しておけば良い。
![[Mylar インストール(5)]](/blog/entries/Trac/20070517_01/mylar_005.jpg)
後はお決まりのライセンス確認。次へ。
![[Mylar インストール(6)]](/blog/entries/Trac/20070517_01/mylar_006.jpg)
インストールされるプラグインを確認。次へ。
![[Mylar インストール(7)]](/blog/entries/Trac/20070517_01/mylar_007.jpg)
インストールの最終確認。次へ。
![[Mylar インストール(8)]](/blog/entries/Trac/20070517_01/mylar_008.jpg)
Eclipse リブートの確認。次へ。
Eclipse Mylar の設定
Eclipse Mylar プラグインのインストールが終了して、Eclipse の再起動が終わったら Mylar の設定を行う。
![[Mylar 設定(1)]](/blog/entries/Trac/20070517_01/mylar_009.jpg)
Eclipse のリブートが完了すると、Mylar の設定画面が表示される。特に変更すべき内容も無かったのでデフォルトの設定のまま次へ(変更したい方はどうぞ)。
![[Mylar 設定(2)]](/blog/entries/Trac/20070517_01/mylar_010.jpg)
"Task List" View を右クリックして "New" を選択すると、"Query..." が表示されるのでこれを選択。
![[Mylar 設定(3)]](/blog/entries/Trac/20070517_01/mylar_011.jpg)
デフォルトではタスクリポジトリに "Eclipse.org" しか登録されていないので、自分の Trac を登録する。"Add Task Repository" を選択。
![[Mylar 設定(4)]](/blog/entries/Trac/20070517_01/mylar_012.jpg)
Server に Trac の URL を入力。Label は任意の文字列で良い。後は、認証が必要であれば認証情報を入力。Trac の場合、Access Type は XML-RPC にする。一通り入力が終わったら、"Validate Settings" を押して一度タスクリポジトリに接続してみる。エラーが出なければ設定完了。
![[Mylar 設定(5)]](/blog/entries/Trac/20070517_01/mylar_013.jpg)
今追加したタスクリポジトリを選択して次へ。
![[Mylar 設定(6)]](/blog/entries/Trac/20070517_01/mylar_014.jpg)
クエリの内容を入力する。今回は全てのチケットを表示する様にしておくため何も設定を行わずに次へ。
![[Mylar 設定(7)]](/blog/entries/Trac/20070517_01/mylar_015.jpg)
"Task List" にチケットが表示されたら設定完了。後は、ここからチケットの起票や更新が可能となる。便利。
Mar 29, 2007
[Trac] Trac のバージョンアップメモ
Debian Sarge の Stable で提供されている Trac は未だに 0.8.x のまま。 残念なことに、最新は 0.10.x まで進化していて 0.8.x では動かないプラグインが山の様に存在する。 なかなか素敵なプラグインを発見したのに 0.8.x では動かないことが分かりガッカリ、という経験を繰り返したので Trac をバージョンアップすることに。
Debian Sarge で Trac を 0.10.x にバージョンアップ
当然 Sarge の Stable では提供されていないので、tar ball を自分で取得してインストールする。 Trac のインストール方法に関しては やどりぎ@NET さんの trac + TracBurndownプラグインでスクラム開発のすすめ を参考にさせていただいた。多謝。
Trac 0.10.x の取得 & 解凍
2007/03/29 現在、0.10.3.1 が最新の様なのでそれを取得する。 取得したらついでに解凍しておく。
$ wget http://ftp.edgewall.com/pub/trac/trac-0.10.3.1.tar.gz
--19:53:27-- http://ftp.edgewall.com/pub/trac/trac-0.10.3.1.tar.gz
=> `trac-0.10.3.1.tar.gz'
Resolving ftp.edgewall.com... 83.168.202.212
Connecting to ftp.edgewall.com[83.168.202.212]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 443,713 [application/octet-stream]
100%[====================================>] 443,713 140.37K/s ETA 00:00
19:53:34 (139.99 KB/s) - `trac-0.10.3.1.tar.gz' saved [443713/443713]
$ tar zxvf ./trac-0.10.3.1.tar.gz
trac-0.10.3.1/
trac-0.10.3.1/AUTHORS
trac-0.10.3.1/cgi-bin/
trac-0.10.3.1/cgi-bin/trac.cgi
(snip)
/usr/lib/python2.3/traceback.pyo
/usr/lib/python2.3/trace.pyo
/usr/sbin/traceroute
$
Trac のインストール
とりあえず Trac のインストーラを実行してみる。
$ cd trac-0.10.3.1 # python ./setup.py install --force running install error: invalid Python installation: unable to open /usr/lib/python2.3/config/Makefile (No such file or directory) #
というわけで、どうやら Python の環境が足りないらしい。 これは python-dev というパッケージをインストールすれば良いらしい。
# apt-get install python-dev
Reading Package Lists... 0%
Reading Package Lists... 0%
(snip)
The following extra packages will be installed:
python2.3-dev
The following NEW packages will be installed:
python-dev python2.3-dev
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 1488kB of archives.
After unpacking 4678kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
0% [Working]
Get:1 http://www.jp.debian.org sarge/main python2.3-dev 2.3.5-3sarge2 [1481kB]
0% [1 python2.3-dev 2288/1481kB 0%]
37% [1 python2.3-dev 564816/1481kB 38%]
66% [1 python2.3-dev 990528/1481kB 66%]
99% [Waiting for headers]
Get:2 http://www.jp.debian.org sarge/main python-dev 2.3.5-2 [6638B]
100% [Working]
Fetched 1488kB in 1s (800kB/s)
Selecting previously deselected package python2.3-dev.
(Reading database ... 24304 files and directories currently installed.)
Unpacking python2.3-dev (from .../python2.3-dev_2.3.5-3sarge2_i386.deb) ...
Selecting previously deselected package python-dev.
Unpacking python-dev (from .../python-dev_2.3.5-2_all.deb) ...
Setting up python2.3-dev (2.3.5-3sarge2) ...
Setting up python-dev (2.3.5-2) ...
#
再度 Trac のインストーラを実行。
今度は正常にインストールされた。# python ./setup.py install --force running install running build running build_py creating build creating build/lib creating build/lib/trac copying trac/__init__.py -> build/lib/trac copying trac/About.py -> build/lib/trac copying trac/attachment.py -> build/lib/trac copying trac/config.py -> build/lib/trac copying trac/core.py -> build/lib/trac (snip) copying wiki-default/WikiProcessors -> /usr/share/trac/wiki-default copying wiki-default/WikiRestructuredText -> /usr/share/trac/wiki-default copying wiki-default/WikiRestructuredTextLinks -> /usr/share/trac/wiki-default copying wiki-default/WikiStart -> /usr/share/trac/wiki-default creating /usr/share/trac/wiki-macros copying wiki-macros/HelloWorld.py -> /usr/share/trac/wiki-macros copying wiki-macros/Timestamp.py -> /usr/share/trac/wiki-macros copying wiki-macros/TracGuideToc.py -> /usr/share/trac/wiki-macros Thank you for choosing Trac 0.10.3.1. Enjoy your stay! #
Trac 0.10.x の動作確認
やどりぎ@NET さんの情報でそのままでは動作しないことは分かっていたのだが、 とりあえずアクセスしてみた。情報通り TracError が発生して動作しなかった。 エラーページに記載されていたコマンドをそのまま実行。
今度は正常に動作した。 これで Trac 0.8.x → 0.10.x のバージョンアップはとりあえず完了(と思いたい)。# trac-admin /tmp/trac/myprojects upgrade Please perform a "resync" after this upgrade. Upgrade done. #
Jun 14, 2006
[Trac] Trac にチャレンジ(5)
カスタムレポートの作成
Trac はバグや TODO、その他 issue などを Ticket として管理する。 レポート機能を使用することで Ticket の一覧画面を簡単にカスタマイズできる。 例えば、「バージョンが 1.0.0 の Ticket 全て」「マイルストーン MS_001 の Ticket の内クローズされていないもの」といった画面を作成できる。 レポートは非常に便利な機能なので、自前の Report 作成にチャレンジしてみた。
カスタムレポートの作成方法
カスタムレポートの作成方法は Trac のヘルプに記述されている。
- Trac Reports
- https://www.in-vitro.jp/projects/wiki/TracReports
- Trac Permissions
- https://www.in-vitro.jp/projects/wiki/TracPermissions
アカウントにレポート生成権限を付与
デフォルト状態のアカウントはレポート生成権限を持っていない。 そのため、trac-admin コマンドを使用してレポート生成権限を与える。
ちなみに、レポート関連の権限には REPORT_VIEW, REPORT_CREATE, REPORT_MODIFY, REPORT_DELETE, REPORT_ADMIN, REPORT_SQL_VIEW がある。 REPORT_CREATE を付与するついでに REPORT_MODIFY を付与しておくと、デフォルトで用意されているレポートの定義情報を見られるようになる。# trac-admin /tmp/trac/myprojects permission add me REPORT_CREATE
レポートの作成
REPORT_CREATE 権限を所有しているアカウントでログインすると、"View Tickets" 画面に "New Report" というリンクが表示される。 "New Report" からレポート生成画面に移動し、Report Title、Description、SQL Query for Report を入力するとレポートが生成される。 今回は特定のコンポーネント用の Ticket を表示するレポートを作成してみた。 作成した、とは言ってもほとんどデフォルトで用意されているレポートの Copy & Paste。
Active Tickets by Component [MyComponent]
SELECT p.value AS __color__,
t.milestone AS __group__,
(CASE status
WHEN 'closed' THEN 'color: #777; background: #ddd; border-color: #ccc;'
ELSE
(CASE owner WHEN '$USER' THEN 'font-weight: bold' END)
END) AS __style__,
id AS ticket, summary, component, status,
resolution,version, severity, priority, owner,
changetime AS modified,
time AS _time,reporter AS _reporter
FROM ticket t,enum p
WHERE status IN ('new', 'assigned', 'reopened') AND
p.name=t.priority AND p.type='priority' AND
component='MyComponent'
ORDER BY (milestone IS NULL), milestone DESC, (status = 'closed'),
(CASE status WHEN 'closed' THEN modified ELSE -p.value END) DESC
All Tickets By Component[MyComponent] (Including closed)
SELECT p.value AS __color__,
t.milestone AS __group__,
(CASE status
WHEN 'closed' THEN 'color: #777; background: #ddd; border-color: #ccc;'
ELSE
(CASE owner WHEN '$USER' THEN 'font-weight: bold' END)
END) AS __style__,
id AS ticket, summary, component, status,
resolution,version, severity, priority, owner,
changetime AS modified,
time AS _time,reporter AS _reporter
FROM ticket t,enum p
WHERE p.name=t.priority AND p.type='priority' AND
component='MyComponent'
ORDER BY (milestone IS NULL), milestone DESC, (status = 'closed'),
(CASE status WHEN 'closed' THEN modified ELSE -p.value END) DESC
Jun 10, 2006
[Trac] Trac にチャレンジ(4)
Ticket のフィールドをカスタマイズする
Ticket にはデフォルトで Summary、Component、Version などいくつかのフィールドが用意されている。 また、デフォルトのフィールドでは不足の際はカスタムフィールドを追加することができる。 ということで、カスタムフィールドの追加にチャレンジ。
- Custom Ticket Fields
- http://projects.edgewall.com/trac/wiki/TracTicketsCustomFields
[ticket-custom] ticket_type = select ticket_type.label = Type ticket_type.options = Memo|Bug|Todo ticket_type.value = 0
Jun 02, 2006
[Trac] Trac にチャレンジ(3)
マクロの追加
Trac built-in Wiki 用のマクロを追加してみた。 マクロは以下で公開されている。
- MacroBazaar
- http://projects.edgewall.com/trac/wiki/MacroBazaar
- TracHacks - plugin
- http://trac-hacks.org/wiki/plugin
- Javadoc
- http://projects.edgewall.com/trac/wiki/MacroBazaar#Javadoc
- AddComment
- http://trac-hacks.org/wiki/AddCommentMacro
- TOC
- http://trac-hacks.org/wiki/TocMacro
Milestone を Google Calendar に表示する
Trac は Roadmap を iCalendar 用データファイルとしてエクスポートする機能を持っている。 このデータファイルには、Milestone やチケットの情報が含まれている。 都合の良いことに、Google Calendar は iCalendar のデータファイルをインポートする機能を持っている。 というわけで、Trac の Roadmap 情報を Google Calendar にインポートできるか試してみた。
Milestone の作成
まず Milestone を作成する。 先日試した様に trac-admin を使用する。 Milestone を作成する際には、必ず完了期日を指定する。 Google Calendar では完了期日の指定されていない Milestone は表示されない。
ちなみに、完了期日の設定されていない Milestone に完了期日を設定する場合は# trac-admin /tmp/trac/myprojects milestone add MyMilestone "Jun 18, 2006"
という様に、"add" コマンドの代わりに "time" コマンドを使用する。# trac-admin /tmp/trac/myprojects milestone time MyMilestone "Jun 18, 2006"
Roadmap のエクスポート
Roadmap ページに行くと、"Download in other formats: iCalendar" というリンクがある。 ここをクリックすると Roadmap の情報がエクスポートされる。
Google Calendar にインポート
Google Calendar の "settings" から "Import Calendar" タブを選択する。
先ほどエクスポートしたデータファイルを選択し、インポート先のカレンダーを指定。
"Import" ボタンを押下するとデータがインポートされる。
May 30, 2006
[Trac] Trac にチャレンジ(2)
Trac の動作環境が整ったので、実際に使用できるようにプロジェクトの初期設定を行う。 プロジェクトにはコンポーネントやマイルストーンなどの初期値が設定されている。 初期値をそのまま使うことはないので、初期値を削除して実際に使用する値をセットする。 この作業はコマンドラインから trac-admin コマンドを実行して行う。
component の設定
コンポーネントの初期値は component1, component2 となっている。 さすがに component1 という名前のコンポーネントを作成することはないだろう。 ということで、これを削除して新しいコンポーネントを追加する。
# trac-admin /tmp/trac/myprojects component list Name Owner -------------------- component1 somebody component2 somebody # trac-admin /tmp/trac/myprojects component remove component1 # trac-admin /tmp/trac/myprojects component remove component2 # trac-admin /tmp/trac/myprojects component list Name Owner ----------- # trac-admin /tmp/trac/myprojects component add MyComponent me # trac-admin /tmp/trac/myprojects component list Name Owner --------------------- MyComponent me #
version の設定
# trac-admin /tmp/trac/myprojects version list Name Time ---------- 1.0 2.0 # trac-admin /tmp/trac/myprojects version remove 1.0 # trac-admin /tmp/trac/myprojects version remove 2.0 # trac-admin /tmp/trac/myprojects version list Name Time ---------- # trac-admin /tmp/trac/myprojects version add 1.0.0 # trac-admin /tmp/trac/myprojects version list Name Time ----------- 1.0.0 #
milestone の設定
# trac-admin /tmp/trac/myprojects milestone list Name Time ---------------- milestone1 milestone2 milestone3 milestone4 # trac-admin /tmp/trac/myprojects milestone remove milestone1 # trac-admin /tmp/trac/myprojects milestone remove milestone2 # trac-admin /tmp/trac/myprojects milestone remove milestone3 # trac-admin /tmp/trac/myprojects milestone remove milestone4 # trac-admin /tmp/trac/myprojects milestone list Name Time ---------- #
May 29, 2006
[Trac] Trac にチャレンジ
Trac とは
Trac は Web インターフェースの Wiki + BugTracker + Subversion Viewer。 聞くところによると結構便利らしい。 WebSVN をインストールしようかと思っていたのだけれど、どうせなら BugTracker も一緒に欲しいということで Trac にしてみた。
- Trac
- http://www.edgewall.com/trac/
- The Trac Configuration File
- http://projects.edgewall.com/trac/wiki/TracIni
Trac のインストールや設定は以下のサイトを参考にさせていただいた。多謝。 (参考というより、指示通りに作業しただけ・・・)
- 鷹の島 - Trac をインストールしてみたよ
- http://espion.just-size.jp/archives/05/297225719.html
- [trac] default_charset
- http://zippo.taiyo.co.jp/~gotoh/diary/?200502a&to=200502023#200502023
Trac のインストール
Trac を Debian Sarge にインストールしたときのメモ。 Debian では apt で Trac をインストールできる。便利。 Trac 本体と Python でマルチバイトを扱うライブラリをインストールする。
# apt-get install trac Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: libsqlite0 python python-clearsilver python-sqlite python2.3 python2.3-clearsilver python2.3-sqlite python2.3-subversion Suggested packages: python-doc python-tk python-profiler python2.3-doc python2.3-profiler enscript python-docutils Recommended packages: python2.3-iconvcodec python2.3-cjkcodecs python2.3-japanese-codecs python-egenix-mxdatetime The following NEW packages will be installed: libsqlite0 python python-clearsilver python-sqlite python2.3 python2.3-clearsilver python2.3-sqlite python2.3-subversion trac 0 upgraded, 9 newly installed, 0 to remove and 0 not upgraded. Need to get 4654kB of archives. After unpacking 15.7MB of additional disk space will be used. Do you want to continue? [Y/n] Y Get:1 http://www.jp.debian.org sarge/main libsqlite0 2.8.16-1 [176kB] Get:2 http://www.jp.debian.org sarge/main python2.3 2.3.5-3sarge1 [2906kB] Get:3 http://www.jp.debian.org sarge/main python 2.3.5-2 [127kB] Get:4 http://www.jp.debian.org sarge/main python2.3-clearsilver 0.9.13-3.2 [81.0kB] Get:5 http://www.jp.debian.org sarge/main python-clearsilver 0.9.13-3.2 [4820B] Get:6 http://www.jp.debian.org sarge/main python2.3-sqlite 1.0.1-2 [29.1kB] Get:7 http://www.jp.debian.org sarge/main python-sqlite 1.0.1-2 [2608B] Get:8 http://www.jp.debian.org sarge/main python2.3-subversion 1.1.4-2 [1130kB] Get:9 http://www.jp.debian.org sarge/main trac 0.8.1-3sarge4 [199kB] Fetched 4654kB in 22s (209kB/s) Preconfiguring packages ... ...略 # apt-get install python2.3-japanese-codecs Reading Package Lists... Done Building Dependency Tree... Done The following NEW packages will be installed: python2.3-japanese-codecs 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 273kB of archives. After unpacking 1237kB of additional disk space will be used. Get:1 http://www.jp.debian.org sarge/main python2.3-japanese-codecs 1.4.9-3 [273kB] Fetched 273kB in 1s (241kB/s) Selecting previously deselected package python2.3-japanese-codecs. (Reading database ... 15287 files and directories currently installed.) Unpacking python2.3-japanese-codecs (from .../python2.3-japanese-codecs_1.4.9-3_i386.deb) ... Setting up python2.3-japanese-codecs (1.4.9-3) ... #
Trac の設定
Trac プロジェクトの作成
# mkdir /tmp/trac # cd /tmp/trac # trac-admin myprojects initenv Creating a new Trac environment at /tmp/trac/myprojects Trac will first ask a few questions about your environment in order to initalize and prepare the project database. Please enter the name of your project. This name will be used in page titles and descriptions. Project Name [My Project]> my projects Please specify the absolute path to the project Subversion repository. Repository must be local, and trac-admin requires read+write permission to initialize the Trac database. Path to repository [/var/svn/test]> /var/svn/svndb Please enter location of Trac page templates. Default is the location of the site-wide templates installed with Trac. Templates directory [/usr/share/trac/templates]> Creating and Initializing Project Inserting default data Configuring Project trac.repository_dir ...略 Congratulations! # chown -R www-data:www-data /tmp/trac
Trac と Apache2 の連携
私の環境では、Trac のメインの用途は Subversion に対する Web インターフェースとなる。 そのため、Trac も Subversion と同一のユーザを使用することにした。 また、アクセス元制限もついでにかけておくことに。
# cat /etc/apache2/sites-available/trac Alias /trac "/usr/share/trac/htdocs/" ScriptAlias /proj "/usr/share/trac/cgi-bin/trac.cgi" <Location "/proj"> SetEnv TRAC_ENV "/tmp/trac/myprojects" SSLRequireSSL AuthType Basic AuthName "please login" AuthUserFile /var/svn/svndb/.svnpasswd Require valid-user order allow,deny allow from 192.168.1. </Location> <Location "/trac"> SSLRequireSSL AuthType Basic AuthName "please login" AuthUserFile /var/svn/svndb/.svnpasswd Require valid-user order allow,deny allow from 192.168.1. </Location> # a2ensite trac Site trac installed; run /etc/init.d/apache2 reload to enable. # /etc/init.d/apache2 reload Reloading web server config...done.cts" #
Trac の設定
Trac 画面のヘッダ、フッタを設定する。 Subversion 内のファイルの文字エンコーディングも設定する。
# cat /tmp/trac/myprojects/conf/trac.ini [header_logo] src = trac_banner.png alt = my projects height = 73 link = https://www.example.com/proj width = 236 [trac] default_charset = japanese.shift_jis ...略 #



