PageRank



轉移公告

計劃把 http://blog.hoamon.info/ 文章全部轉移至 http://www.hoamon.info/blog/ 這裡,而本 Blogger 站台的文章近 500 篇,我預計在 2014-12-31 前移轉完畢,完成後 http://blog.hoamon.info/ 將只作代轉服務,一律把舊連結如 http://blog.hoamon.info/index.html 轉成 http://www.hoamon.info/blog/index.html ,敬請舊雨新知互相走告。

新文章只發佈在 http://www.hoamon.info/blog/ 。

何岳峰 敬上
顯示具有 trac 標籤的文章。 顯示所有文章
顯示具有 trac 標籤的文章。 顯示所有文章

2009年1月21日 星期三

Trac + Mercurial on Apache 的亂碼問題

這個問題搞了我很久。

用 trac 內帶的 tracd 來跑, changelog 部份的中文就是正常的,但跑在 apache 上時,它就亂了,而且只亂 changelog 部份,程式碼的 diff 結果及 raw 格式都沒事。

看了很久的 mercurial-plugin-0.11 程式碼,看來看去覺得這應該是 mercurial 的錯,不過為什麼我在 shell 中用沒事,或是用 tracd 跑也沒問題,但它跑在 apache 上就錯了呢???

hg 在讀 changelog 的部份,它是用 mercurial.changelog.changelog 函式來處理,但裡面有一個 read() 被 mercurial-plugin 拿來用了,而這個 read 函式在解讀字串時,要叫用 util.tolocal() 來處理編碼,只要沒設定 os.environ['HGENCODING'] 的話,它就會預設為 ascii ,這就是造成 changelog 亂碼問題的地方。

以前,我只須在 /etc/python2.5/sitecustomize.py 設定 sys.setdefaultencoding('utf8') 就行了,現在還得加上 os.environ['HGENCODING'] = 'utf-8' 。

我還是不太懂 os 及 sys 的差別是什麼?

2008年1月22日 星期二

Trac0.11b1 + Mercurial + Postgresql

基於對 Python 的喜愛,所以想要把 subversion 換成 Mercurial ,但目前還只是測試階段,真正上線使用的還是 subversion 。另外一直都想要找個機會把 Mysql 換掉,到不是說 Mysql 不好用,而是我對於 PostgreSQL 本來就有一分感情,那是在 Mysql3,4 還不支援 UTF-8 時,我用 Perl 寫了一個 unicode 字的查詢系統。

而今天所要介紹的,不過是我在工餘之際把玩的小小玩意,既然成功了,那就作個紀錄。

在 Ubuntu 安裝軟體是一點都不難的(只要有 .deb 檔),所以要裝 Trac + PostgreSQL + Mercurial ,請執行下面指令:

# sudo apt-get install postgresql-client-8.2 postgresql-8.2 python-psycopg2 \
> python-setuptools python-genshi \
> python-psycopg2 python-pygments python-docutils mercurial

接下來,安裝 Trac 0.11b1 主程式
# sudo easy_install http://ftp.edgewall.com/pub/trac/Trac-0.11b1.tar.gz

最後安裝 Trac 控制 Mercurial 的外掛
# svn co http://svn.edgewall.com/repos/trac/sandbox/mercurial-plugin-0.11
# cd mercurial-plugin-0.11/
# sudo python setup.py install

再來是設定,首先我們建立一個 dbuser ,這方面, PostgreSQL 有點奇怪,或許是我 Mysql 用久了,
# sudo -u postgres createuser trac -P
Enter password for new role:
再輸入一次:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
CREATE ROLE
# sudo createdb -O trac trac
並將 pg_hba.conf 中的
local all all ident sameuser
改成
local all all password

這樣你的 trac 程式就可以透過帳號: trac 密碼: trac host: localhost 的方式與 PostgreSQL 連接了。

接下來,初始化 trac 設定目錄及 hg 儲存庫:
# trac-admin /path/to/myproject initenv
# hg init /path/to/myproject/hg

另外在 trac.ini 中加入
[components]
tracext.hg.* = enabled

[hg]
show_rev = yes
node_format = short

用 tracd --port 8000 /path/to/myproject 測試一下有沒有問題,沒有問題就讓 mod_python 來跑吧!

下面則是 mod_python 的設定檔

NameVirtualHost *:443

ServerAdmin admin@xxx.com
ServerName trac.xxx.com
DocumentRoot /www/trac

SetHandler mod_python
PythonHandler trac.web.modpython_frontend
#PythonPath "sys.path+['/usr/local/Trac/lib/python2.5/site-packages/']"
PythonOption TracEnv /www/trac
PythonOption TracUriRoot /
PythonDebug Off
SetEnv PYTHON_EGG_CACHE /www/trac/tmp
SetEnv LANG UTF-8
SetEnv HTTPS 1
AuthType Basic
AuthName "Trac Server"
AuthUserFile /www/htpasswd_users
Require valid-user

ErrorLog /var/log/apache2/trac_error.log
LogLevel warn
CustomLog /var/log/apache2/trac_access.log combined
ServerSignature Off
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem

2007年9月18日 星期二

讓 Trac 支援 Email on Change

當 Trac 系統上有人增加/修改了一篇 wiki 、 ticket ,它能直接以 email 的方式讓其他人知道。

方法是:只要在 trac.ini 中編輯以下選項即可。

smtp_enabled = true
smtp_server = localhost
smtp_from = dontreply@mailserver
smtp_replyto = dontreply@mailserver
smtp_always_cc = XXX@gmail.com, YYY@gmail.com
always_notify_owner = true # 任何改變也會寄給「被指派的人」
always_notify_reporter = true # 任何改變也會寄給「創ticket的人」
always_notify_updater = true # 寄給改變這個 ticket 狀態的人

smtp_server 是寄信伺服器,如果你是在 hinet 的網路之下,可使用 msa.hinet.net ,它不會擋你。smtp_from, smtp_replyto 不重要,因為你不期待有人針對通知信回信。而 smtp_always_cc 則是每封通知信一定要寄的對象。

修改後,再重啟 apache 即可。

另外當你使用 ticket 時,要讓多人知道這個 ticket ,請使用 Cc: 欄位,其值為收信地址,若多值請用逗號隔開。

2007年7月14日 星期六

使用 Trac 的錯誤示範: Section 2

非常高興,在本文中,我們又邀請兩位知名「演員」為我們示範 Trac 的錯誤使用方法,就有請第一男主角:小強、第二男主角:阿蒙,出場!

小峰一開始在 wiki 的研討會準備事項中寫著:
  1. 要有紅茶
  2. 要買喝紅茶的吸管
  3. 記得買停車券
  4. 18日會有大頭來視察
小強後來把研討會準備事項內容改成:
  1. 要有檸檬紅茶
  2. 19日會有大頭來視察
  3. 20日記得買停車券
但小強的修改是有問題的。

小強在原本的 1、3、4 點作部份加強,這部份沒問題。然而他把原本的第 2 點完全刪除了。這是不對的,除非他明知這一點是要刪除的,但事實上不是,因為吸管是有必要存在的。

因為小強是後修改的人,所以他有責任及權利把別人之前的成果整合到自已的內容當中。要不然你刪我加,我刪你加,搞到最後,內容到底要什麼都亂了。

2007年6月23日 星期六

使用 Trac 的錯誤示範: Section 1

非常高興,在本文中,我們邀請兩位知名「演員」為我們示範 Trac 的錯誤使用方法,就有請第一男主角:小強、第二男主角:阿蒙,出場!

小強:學長你丟給我的 ticket ,我不太懂是什麼意思耶~
阿蒙:應該是我前天還是昨天 assign 給你的那一個吧!是不是跟寄信有關。
小強:是的,好像是叫我找 python 寄 html 的模組,我不太懂「寄 html 」的意義是什麼。
阿蒙:你記不記得你有收到一封信,內容中的連結是原始網址,像是: http://xxx.yyy.zzz/id/modeule/?pk=32ufjdaddadf 之類的東西。
小強:有大致看過,好像是這樣的。
阿蒙:那是因為我寄出信的格式是 plain 純文字檔,所以無法把網址變成真正的超連結。所以我希望你幫我找到給 python 用的模組,而讓能它寄出 html 格式的信件。
小強:那我知道了。

看倌們!看出問題了嗎?

問題1:小強在 trac 上看到一個不了解涵義的 ticket ,他想要問阿蒙,他選擇的方式不是當下打電話或是在此 ticket 上作 comment 再指派回阿蒙身上,而是選擇記在腦海中,要在某一天遇到阿蒙時「記得」問他。如果還得把「專案開發」時衍生的「溝通工作」記在腦海中,那麼 Trac 就沒有存在的意義,而且用人腦記住也絕比不上用電腦記住來的正確。

問題2:明知道小強應該會不懂你的要求,為什麼不一開始就在 ticket 上寫清楚,還要浪費一次溝通呢!

2007年3月26日 星期一

sqlite3的資料備份及回復

因為我的系統從 fedora 改成 ubuntu 6.10 ,造成 trac 系統無法運作,它出現的錯誤訊息是:

Command failed: unsupported file format

查了一下,問題是出在 ubuntu 的 sqlite3 版本不夠新,所以無法讀取之前 fedora 的 db 檔。這問題不大,把 db 檔的資料 dump 出來,再用舊版本的 sqlite3 import 進去就行了。

$ sqlite3 xxx.db .dump > xxx.sql # 在 fedora 上執行 $ sqlite3 xxx.db < xxx.sql # 在 ubuntu 上執行

這樣你的 db 檔就可以給 trac 用啦。

誰還在用 copy 呀!

曾看過一個網友留言,說道他的小組才3個人而已,用不上 VSS(Visual SourceSafe) 之類的東西,他都是用 copy 的方式與其他人交換程式的。不曉得他這番話的重點是說 VSS 不好用,還是版本控制器不適合小組作業,只能用在大專案上。

從我認識了 cvs 及 subversion 後,就算是只有我自己在開發程式,如果不用版本控制器管理純文字格式文件的話,會覺得十分對不起自己。

想想看,一個程式檔你除了思考程式邏輯外,還要拿一份「記憶體」放置今天的算法與昨天算法在程式碼的差別,喔~饒了我吧!我的腦袋放不了那麼多東西了。

況且有那麼多的 open source 工具協助你,實在沒有理由不用版本控制器。想想看程式/文件寫了3個月後,你忽然覺得後悔了,想回復3天前放棄的演算法,你要拿出 xxx_070321.tgz、xxx_070322.tgz 出來,一個檔一個檔地找嗎?還是用 Trac + subversion 之類的工具,讓你可以點選
http://ptrac.hoamon.info/changeset/3 ,然後從這找出你想要的算法呢!!

嗨~朋友,我懇求你學一下 subversion 吧!別把你的青春放在這,多一點時間玩 online game 會比較好。

我的另一篇文章: 版本控制系統 svn(subversion)

2007年3月10日 星期六

Use Djange Project Step by Step

當我為這個主題寫第二篇文章時,發現這類型的文章並不適合用 blog 形式展現,文章與文章之間鍵結能力太差了,而且要寫的豐富、深入有時候還需要過客的協助。

所以我把整篇文章都丟到 Trac 系統( http://ptrac.hoamon.info/wiki/UseDjango ),TOC:

Use Djange Project Step by Step
  1. 安裝Django
  2. 使用models建立資料表
  3. 建立 admin 頁面
  4. ……
本來只是想拿 Trac 系統練習多人的軟體專案管理,但用來作自己的文章/手冊管理也不錯喔~

2007年3月2日 星期五

Python: 持續讚嘆中

我幾天都在 Python 的領域中翻滾,看了許多 Trac 及 Django 的文件,覺得 Python 開發模式實在是太棒了。這對過去常用 PHP 的人來說,是一種新鮮的經驗。

感到最大的不同點是:
  1. 自己帶 web server裝
    • Trac 或 Django 的程式時,它們會自己帶一個 http deamon(lighthttpd) ,所以程式裝完,不太需要設定,就可以跑了。
  2. 程式是裝在系統中,而不是 www 資料夾
    • 並不像 PHP 的專案,要把所有的程式放在某個地方,然後設定 apache 的 DocumentRoot 。這些 Python 程式就像是一個元件或函式庫是放在系統用的資料夾中,也就是當你要寫別的專案時,直接在程式碼中 import 進來。而不是 require('特定位址的 php 程式')
因為第2點的特性,所以軟體工程師在開發 web 專案時,必需將程式以 class 的方式存在,所以專案的可用性也就提高了。

Python 真是好東西呀!

2007年2月27日 星期二

Trac安裝筆記(下)

上一篇文章我們談了使用內建的 Tracd 來執行 Python 的 CGI 程式,本篇文章則是要介紹用 Apache2 + mod_python 來跑 Trac 程式。

事實上,這沒什麼難度,3個步驟就結束了:
  1. 安裝 mod_python
  2. 設定 apache.conf
  3. 設定 .htpasswd
閱讀更多…

2007年2月26日 星期一

Trac安裝筆記(上)

2006年在自由軟體的最佳開發人員協助工具領域獲得評審肯定大獎的 Trac 軟體,是一套結合 Wiki 及 Request Ticket 的網頁程式。

wiki 適合來作規格書的共同開發; RT 則適合作程式專案的回饋追蹤。本來以為只有我會把這兩樣東西合在一起使用,正想裝一個 kwiki 及一個 RT 系統時(真巧兩個都是 Perl 寫的),居然讓我發現這個用 Python 寫的整合系統 Trac ,嘿嘿~世事難料!果然如此。

Trac 官網: http://trac.edgewall.org/ (原 http://trac.edgewall.com/ )
它本來應是一間公司,不過現在改成 .org 的,站上也沒看見任何販賣及商業支援的資訊,應該不會是搞 Python 的,都賺不了錢吧!希望是錢賺太多,不想賺了。

閱讀更多…
Related Posts Plugin for WordPress, Blogger...