Skip to content


ปัญหาการใช้ web interface ของ trac

หลังจากสร้าง wiki เป็นของตัวเอง จึงได้รวบรวมปัญหา และการติดตั้งเป็นอันเดียวกันใน wiki
โดยมีวิธีการที่ง่าย และสะดวกกว่าที่ การติดตั้ง SVN & Trac ร่วมกับ Apache ใน Ubuntu

จาก 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 ลักษณะคือ

  1. Standalone : รันบน tracd พอร์ต(port) 8000 ซึ่งสามารถวิ่งใช้บน localhost ได้สบายๆ
    standalone
  2. 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


Reference

รับข้อมูลจาก (Reference) :

จาก WikiBall : http://wiki.memoball.info/index.php/การติดตั้ง_trac_บน_linux_(Ubuntu)

Posted in Trac & SVN. Tagged with , , .

One Response

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

Continuing the Discussion

  1. การติดตั้ง SVN & Trac ร่วมกับ Apache ใน Ubuntu – MEMOBALL.info linked to this post on October 2, 2009

    [...] และสะดวกกว่าการติดตั้งแบบที่นำเสนอครั้งก่อน โดยอาศัย dav_svn กับ mods_python [...]

Some HTML is OK

(required)

(required, but never shared)

or, reply to this post via trackback.