ช่วงนี้กำลังต้องการใช้ SVN ซึ่งใช้จัดการกับโค้ด (source code) ของเราในลักษณะ sub version ทำให้เราสามารถจัดการโค้ดของเราได้ง่ายขึ้น สามารคดูโค้ดย้อนหลัง การเปลี่ยนแปลงต่างๆ ได้ ซึ่งถ้าจำไม่ผิดใครใช้ eclipse ก็มี feature นี้ให้อยู่แล้ว แต่การทำงานเป็นทีมนั้นอาจจะทำให้ทำงานไม่สะดวก ผมจึงเลือกใช้ trac เข้ามาช่วยในการจัดการ
ตอนแรกผมเขียนเป็น blog เกี่ยวกับการติดตั้งไว้หลายอัน แต่สุดท้ายผมเลยเอามารวมกัน แล้วลบส่วนที่ไม่จำเป็นออก ดังนี้
จาก WikiBall
เนื้อหา |
การติดตั้ง
ขั้นแรกติดตั้ง apache, sqlite
ต่อไป download source จาก<a href=”http://”> http://trac.edgewall.org/wiki/TracDownload</a>
ระเบิด(Extract) มันออกมา (ถ้าเป็น tar.gz)
$ tar -xzf trac.tar.gz
เข้าไปยัง source ที่ระเบิดได้
ถ้ายังไม่มี python ก็ในลง python ก่อน แต่ Ubuntu ตัวใหม่ๆ จะมีมาให้อยู่แล้วแต่ยังไม่มี setuptools ตังนั้น ใช้คำสั่งนี้ลงได้ทีเดียวเลยครับ
$ sudo apt-get install python-setuptools
ต่อไป compile เลย
$ sudo python ./setup.py install
ดูเพิ่มเติมได้ที่ > การติดตั้ง Trac
การสร้าง project enviroment
รันคำสั่ง
$ trac-admin /path/to/myproject initenv
ดู option ต่างๆ ได้ที่ การใช้ [initenv]
การทำ Authentication
trac นั้นจะใช้การ Authentication ผ่าน apache จะง่ายกว่ามากครับ
โดยในที่นี้จะกล่าวถึงเฉพาะ tracd หรือ Trac แบบ standalone เท่านั้นโดยมีวิธีทำดังนี้
การสร้างแบบ .htpasswd
htpasswd -c /path/to/env/.htpasswd username
เพิ่ม user ที่ต้องการ
sudo htpasswd /path/to/env/.htpasswd username2
รัน tracd โดยใช้ option – -basic-auth
การสร้างแบบ .htdigest
htdigest -c /path/to/env/.htpasswd realm username
เพิ่ม user ที่ต้องการ
htdigest /path/to/env/.htpasswd realm username
รัน tracd โดยใช้ option – -auth
การรัน Service ของ trac
การรัน Service ของ trac นั้นจะแบ่งเป็น 2 ลักษณะคือ
- Standalone : รันบน tracd พอร์ต(port) 8000 ซึ่งสามารถวิ่งใช้บน localhost ได้สบายๆ
standalone - WebService : รันบน TracCgi หรือ TracModPython(SVN+Trac+apache2) ซึ่งง่ายกว่ากันมาก
ในที่นี้จะกล่าวถึงเฉพาะ Standalone เท่านั้น ถ้าต้องการแบบ modPython คลิกที่นี่ SVN+Trac+apache2 ซึ่งง่ายกว่ากันมาก
การรันโดยใช้ Basic Authentiction
tracd -p 8080 --basic-auth=environmentname,/fullpath/environmentname/.htpasswd,/fullpath/environmentname /fullpath/environmentname
การรันโดยใช้ Digest Authentiction
$ tracd -p port --auth=base_project_dir,password_file_path,realm project_path
- base_project_dir คือ directory หลักของ project (ตัวเล็กใหญ่มีผล)
- password_file_path คือ path ที่อยู่ของไฟล์รหัสผ่าน
- realm คือ ชื่อที่อยู่ของโปรเจค (URL)
- project_path คือ ที่อยู่ของ project
การรันแบบ Multiple Project
$ tracd -p 8080 \ --auth=project1,/path/to/users.htdigest,mycompany.com /path/to/project1
$ tracd -p 8080 \ --auth=project1,/path/to/users.htdigest,mycompany.com \ --auth=project2,/path/to/users.htdigest,mycompany.com \ /path/to/project1 /path/to/project2
$ tracd -p 8080 \ --auth="*",/path/to/users.htdigest,mycompany.com \ /path/to/project1 /path/to/project2
ระวังห้ามใส่ตัวใหญ่
Service tracd
ใส่ script ดังนี้ใน /etc/init.d/tracd
#! /bin/sh
#
# tracd Trac standalone server daemon
#
# Author: cocoaberry
#
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Trac standalone server"
NAME=tracd
DAEMON=/usr/bin/$NAME
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
# defaults for tracd
TRACD_PORT=8080
TRACD_BIND_ADDRESS=0.0.0.0
TRACD_EXTRA_OPTS=
# Read config file if it is present.
if [ -r /etc/default/$NAME ]
then
. /etc/default/$NAME
fi
#
# Function that starts the daemon/service.
#
d_start() {
start-stop-daemon --start --background --make-pidfile --quiet \
--pidfile $PIDFILE --chuid $TRACD_USER \
--exec $DAEMON -- $TRACD_EXTRA_OPTS --port $TRACD_PORT --hostname $TRACD_BIND_ADDRESS $TRACD_ENVIRONMENTS
}
#
# Function that stops the daemon/service.
#
d_stop() {
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE \
--name $NAME
}
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;
restart|force-reload)
#
# If the "reload" option is implemented, move the "force-reload"
# option to the "reload" entry above. If not, "force-reload" is
# just the same as "restart".
#
echo -n "Restarting $DESC: $NAME"
d_stop
sleep 1
d_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
โดยตั้งค่าไหม่ดังตัวอย่าง
TRACD_USER=tracd # The environments that tracd manages. If more than one, separate # with spaces TRACD_ENVIRONMENTS=/home/tracd/trac-env # Extra options to tracd TRACD_EXTRA_OPTS="--auth *,/home/tracd/trac.htdigest,TracRealm"
ref : http://codesnippets.joyent.com/tag/tracd
การทำ NGINX + TRAC
แต่ในที่นี้จะกล่าวถึงการใช้ Standalone บนโดยใช้ nginx มาวิ่งเป็น webservice แบบ proxy
ต่อไป ทำการสร้าง project environment
$ trac-admin /path/to/myproject initenv
รันแบบ standalone ได้เลย
tracd --port 8000 /path/to/myproject
จากนั้นไป set ใน nginx ให้ ทำ proxy มาที่ service ที่เราใส่ไว้
server {
listen 80;
server_name trac.xxxxxxxxxx.com;
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
location /OC/report {
root /var/trac/test/htdocs;
autoindex on;
}
location / {
proxy_pass http://127.0.0.1:8001;
}
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
proxy_pass http://127.0.0.1:8001;
#root /var/trac/test/htdocs;
}
location /munin/ {
root /var/trac/test/htdocs;
}
}
ดูเพิ่มเติมได้ที่ : การตั้งค่าสำหรับ_nginx_(Nginx_configuration)
การสร้าง Repository
เนื่องจาก trac เองเป็นแค่หน้ากากครอบตัว svn อยู่เท่านั้น ดังนั้นเราจึงต้องสร้าง repository ผ่านท่าง subversion เท่านั้น
Troubleshooting
โหลดโปรเจคไม่ขึ้น
เกิด error ดังต่อไปนี้
Traceback (most recent call last):
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/web/api.py", line 367, in send_error
'text/html')
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/web/chrome.py", line 688, in render_template
data = self.populate_data(req, data)
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/web/chrome.py", line 596, in populate_data
d['chrome'].update(req.chrome)
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/web/api.py", line 194, in __getattr__
value = self.callbacks[name](self)
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/web/chrome.py", line 464, in prepare_request
for category, name, text in contributor.get_navigation_items(req):
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/ticket/web_ui.py", line 162, in get_navigation_items
if 'TICKET_CREATE' in req.perm:
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/perm.py", line 523, in has_permission
return self._has_permission(action, resource)
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/perm.py", line 537, in _has_permission
check_permission(action, perm.username, resource, perm)
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/perm.py", line 424, in check_permission
perm)
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/perm.py", line 282, in check_permission
get_user_permissions(username)
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/perm.py", line 357, in get_user_permissions
for perm in self.store.get_user_permissions(username):
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/perm.py", line 173, in get_user_permissions
db = self.env.get_db_cnx()
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/env.py", line 264, in get_db_cnx
return DatabaseManager(self).get_connection()
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/db/api.py", line 76, in get_connection
return self._cnx_pool.get_cnx(self.timeout or None)
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/db/pool.py", line 174, in get_cnx
return _backend.get_cnx(self._connector, self._kwargs, timeout)
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/db/pool.py", line 107, in get_cnx
cnx = connector.get_connection(**kwargs)
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/db/sqlite_backend.py", line 126, in get_connection
return SQLiteConnection(path, params)
File "/usr/lib/python2.5/site-packages/Trac-0.11.2.1-py2.5.egg/trac/db/sqlite_backend.py", line 159, in __init__
raise TracError('Database "%s" not found.' % path)
TracError: Database "/var/trac/test/test.db" not found.
สาเหตุ
- เกิดจากการสร้าง environment ของโปรเจคนั้นๆ ไม่สมบูรณ์ ให้สร้าง environment ใหม่ โดยให้ขึ้น complete ด้วย ซึ่งในบางครั้งมีไฟล์ใหม่ใน path แต่ก็ยังไม่สมบูรณ์ สังเกตได้จากการรายงานของ trac-admin ตอนส้าง
- ไม่สามารถเปิดไฟล์ DB ของ Sqlite ได้ เนื่องจากติด permission ของ OS
admin tab ไม่ขึ้น
ยังไม่ได้ Authen
login ไม่ได้
ในกรณีนี้จะเกิด error ที่หน้า login เพราะ ไม่ได้ run แบบ authentication หรือ file authentication เกิดการผิดพลาด สังเกตดูว่ามีข้อผิดพลาด(warning)ขณะรัน tracd หรือไม่ ถ้าไม่ ลองดูกรณีของชื่อโปรเจคหรือไม่(ต้องใส่ตัวเล็ก)
ในกรณีทีทำทุกอย่างถูกต้องแล้วแต่ยังไม่สามารถทำ authentication ได้นั้น อาจเป้นเพราะ เมื่อรัน tracd ในส่วน –suthen=project นั้นให้ใส่ path ของเราที่เหมือนกัน URL ใน browser ของเรา เช่น โปรเจค DEMO ซึ่งในหน้า Browser ของเราปรากฎเป็น xxx.xxxxx.com/env/ ก็ใช้ใส่เป็น –authen=env
http://trac.edgewall.org/wiki/TracSubversion#unsupported-vcs
repository & SVN error
Warning: Can't synchronize with the repository (Unsupported version control system "svn": "No module named svn" ). Look in the Trac log for more information.
Trac Error
Unsupported version control system "svn": "No module named svn"
ลองทดสอบดูว่า subversion module ของ python ได้ถูกติดตั้งไว้หรือไม่
http://trac.edgewall.org/wiki/TracSubversion#unsupported-vcs
ถ้าขึ้นข้อความมาแสดงว่ายังไม่ได้ลง ใช้ติดตั้งดังนี้
$ apt-get install python-subversion
HTML preview not available
HTML preview not available, since no preview renderer could handle it. Try downloading the file instead.
ถ้าไปเปิดใน log ดูจะเห็นว่า
WARNING: HTML preview using <trac.mimeview.php.PHPRenderer object at 0x86db16c> failed (Running (php -sn) failed: 127, sh: php: not found .) Traceback (most recent call last): File "/usr/lib/python2.5/site-packages/Trac-0.11.4-py2.5.egg/trac/mimeview/api.py", line 715, in render rendered_content, filename, url) File "/usr/lib/python2.5/site-packages/Trac-0.11.4-py2.5.egg/trac/mimeview/php.py", line 93, in render raise Exception(msg) Exception: Running (php -sn) failed: 127, sh: php: not found .
ให้ลง php5-cli ไปก็เปิดได้เรียบร้อย
$ sudo apt-get install php5-cli
Plugin
- ProgressMeter http://trac-hacks.org/wiki/ProgressMeterMacro
Reference
- http://trac.edgewall.org/wiki/TracInstall
- http://trac.edgewall.org/wiki/TracEnvironment
- http://trac.edgewall.org/wiki/TracFaq

0 Responses
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.