這個問題搞了我很久。
用 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 的差別是什麼?
轉移公告
計劃把 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 ,敬請舊雨新知互相走告。
何岳峰 敬上
2009年1月21日 星期三
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 的設定檔
而今天所要介紹的,不過是我在工餘之際把玩的小小玩意,既然成功了,那就作個紀錄。
在 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: 欄位,其值為收信地址,若多值請用逗號隔開。
方法是:只要在 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、3、4 點作部份加強,這部份沒問題。然而他把原本的第 2 點完全刪除了。這是不對的,除非他明知這一點是要刪除的,但事實上不是,因為吸管是有必要存在的。
因為小強是後修改的人,所以他有責任及權利把別人之前的成果整合到自已的內容當中。要不然你刪我加,我刪你加,搞到最後,內容到底要什麼都亂了。
小峰一開始在 wiki 的研討會準備事項中寫著:
- 要有紅茶
- 要買喝紅茶的吸管
- 記得買停車券
- 18日會有大頭來視察
- 要有檸檬紅茶
- 19日會有大頭來視察
- 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 上寫清楚,還要浪費一次溝通呢!
小強:學長你丟給我的 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 用啦。
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)
從我認識了 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
所以我把整篇文章都丟到 Trac 系統( http://ptrac.hoamon.info/wiki/UseDjango ),TOC:
Use Djange Project Step by Step
- 安裝Django
- 使用models建立資料表
- 建立 admin 頁面
- ……
2007年3月2日 星期五
Python: 持續讚嘆中
我幾天都在 Python 的領域中翻滾,看了許多 Trac 及 Django 的文件,覺得 Python 開發模式實在是太棒了。這對過去常用 PHP 的人來說,是一種新鮮的經驗。
感到最大的不同點是:
Python 真是好東西呀!
感到最大的不同點是:
- 自己帶 web server裝
- Trac 或 Django 的程式時,它們會自己帶一個 http deamon(lighthttpd) ,所以程式裝完,不太需要設定,就可以跑了。
- 程式是裝在系統中,而不是 www 資料夾
- 並不像 PHP 的專案,要把所有的程式放在某個地方,然後設定 apache 的 DocumentRoot 。這些 Python 程式就像是一個元件或函式庫是放在系統用的資料夾中,也就是當你要寫別的專案時,直接在程式碼中 import 進來。而不是 require('特定位址的 php 程式')
Python 真是好東西呀!
2007年2月27日 星期二
Trac安裝筆記(下)
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 的,都賺不了錢吧!希望是錢賺太多,不想賺了。
閱讀更多…
wiki 適合來作規格書的共同開發; RT 則適合作程式專案的回饋追蹤。本來以為只有我會把這兩樣東西合在一起使用,正想裝一個 kwiki 及一個 RT 系統時(真巧兩個都是 Perl 寫的),居然讓我發現這個用 Python 寫的整合系統 Trac ,嘿嘿~世事難料!果然如此。
Trac 官網: http://trac.edgewall.org/ (原 http://trac.edgewall.com/ )
它本來應是一間公司,不過現在改成 .org 的,站上也沒看見任何販賣及商業支援的資訊,應該不會是搞 Python 的,都賺不了錢吧!希望是錢賺太多,不想賺了。
閱讀更多…
訂閱:
文章 (Atom)