安装完成后的补充说明:这是我第三次配置trac了,每一次都用了我大量的时间。第一次在我笔记本上,操作系统是win7,由于对python不熟悉,慢慢摸。第二次是在家里的台式机上,系统是win2008R2,本以为已经搞过一次,应该很快弄好,哪知道还是废了不少时间,边看文档边下载资源,而这些开源软件的帮助文档是非常凌乱的,一点都不系统,因而安装时在草稿上大致记录了安装的过程。
有了上一次的安装记录,再加上这次在学校的服务器上安装,环境和我家里一样,都是win2008r2,本以为很快就能搞定,顺便整理出安装文档放到博客上,供大家借鉴。然而,没想到的是仅仅是一个细微的差别,多耗了我几个小时,那就是这次一开始的时候顺手在官网上下了个python2.7.2,到了最后才发现,找不到供python2.7使用的subversion绑定,虽然在trac网站上有人做了一个,但安装后不能加载,而尝试用2.6的也证明是失败。
所以在下文的叙述中,用红色的字体标明第一次失败后,回过头了再次使用python2.6的情况记录。
安装环境
windows 2008 R2 标准版,64位的操作系统。
下载python-2.7.2.msi
点击安装后,除了设定安装路径到D:/Program Files/Python27外,没有定制任何信息,一路next直至结束。
说明:由于兼容性的问题,最终安装的版本是python-2.6.msi,目前似乎官网已经没有这个版本的下载链接了,我之前从官网上下过。(我安装软件的习惯是总是从官网下载,从不到其他下载站。)
setuptools-0.6c11.win32-py2.7.exe
下载地址是:http://pypi.python.org/pypi/setuptools#files
点击安装,能自动检测到已经安装了的python27,没有定制任何信息,一路next直至结束。
说明:由于兼容性的问题,最终安装的版本是:setuptools-o.6c11.wind32-py2.6.exe。
使用easy_install安装Trac
1. 进入command命令窗口,根据我们python的安装目录,切换当前目录到d:/program files/python27/scripts。
2. 依次执行如下命令:
d:/program files/pytnon27/scripts> easy_install Babel==0.9.5
d:/program files/python27/scripts> easy_install Trac
创建项目
至此,可以使用trac_admin创建项目下,命令如下:
d:/program files/python27/scripts/trac_admin d:/TracProject oschool
在运行时需要输入项目的名称和选择数据库,然后在输入一系列的信息后提示项目成功创建。应答的提示如下:
D:/Program files/Python27/Scripts>trac-admin d:/TracProject/oschool initenv
Creating a new Trac environment at d:/TracProject/oschool
Trac will first ask a few questions about your environment
in order to initialize 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]> oschool <- 键入的内容
Please specify the connection string for the database to use.
By default, a local SQLite database is created in the environment
directory. It is also possible to use an already existing
PostgreSQL database (check the Trac documentation for the exact
connection string syntax).
Database connection string [sqlite:db/trac.db]> <- 此处直接回车,表示选择sqlite数据库
这时在d:/TracProject目录下就已经生成了一个oschool的文件夹,其中的内容就是一个trac的项目。
使用Tracd
执行tracd --port 8000 d:/TracProject/oschool,显示如下:
D:/Program files/Python27/Scripts>tracd --port 8000 d:/TracProject/oschool
Server starting in PID 2932.
Serving on 0.0.0.0:8000 view at http://127.0.0.1:8000/
Using HTTP/1.1 protocol version
然后在浏览器中浏览http://localhost:8000 将显示oschool的管理界面,点击进入oschool之后的页面如下:
此时,还缺少一些功能,如:帐号和安全权限设置,wiki的图形化编辑器,以及和SVN的关联来浏览源代码等。所有这些功能都可以通过安装插件的增加。
源代码管理我使用了VisualSVN,所以Trac中也想直接使用SVN是的用户帐号,安装过程如下:
使用SVN的用户帐号来登录项目
VisualSVN的数据仓库路径为d:/repositories,密码文件路径为:d:/repositories/htppasswd,所以用下面的语法启动tracd,就可以使用VisualSVN中的用户登录trac项目的web页面了。
d:/Program files/Python27/Scripts>tracd --basic-auth="*,d:/repositories/htpasswd,ruandao.com" --port 8000 d:/TracProject/oschool
不过这时登录的用户不具备TRAC_ADMIN权限。需要用下面的命令授权:
trac-admin d:/tracProject/oschool (说明:进入管理oschool的命令环境)
permission add yangwugui TRAC_ADMIN(说明:yangwugui用户已经在VisualSVN中存在了。)
这时登录启动服务,以yangwugui用户登录时就能看到管理员标签项(位于右上方)。打开管理员菜单可以看到插件管理项,这时只有一个插件,界面如下:
安装帐号管理器
在http://trac-hacks.org 上有一系列的插件。帐号管理是其中的一个,另外还包括wiki的可视化编辑插件等。
我之前使用过命令行:easy_install https://trac-hacks.org/svn/accountmanagerplugin/trunk 能很顺利的完成帐号管理插件的安装,但是不知道为什么,这次就是不行,而且我上次的环境也是win2008R2。错误提示信息如下:
Downloading https://trac-hacks.org/svn/accountmanagerplugin/trunk
Doing subversion checkout from https://trac-hacks.org/svn/accountmanagerplugin/t
runk to c:/users/admini~1/appdata/local/temp/easy_install-iyyrh_/trunk
'svn' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
Processing trunk
error: Couldn't find a setup script in c:/users/admini~1/appdata/local/temp/easy
_install-iyyrh_/trunk
因而这次先把插件下载本地,然后用python.exe执行其中的setup.py设置程序。格式如下:
d:/download/trac/> “d:/program files/python27/python.exe” setup.py bdist_egg
这时将在setup.py位置生成一个.egg文件,在上述管理员页面中上传安装该egg即可完成插件的安装。插件的安装后台机制是,把egg文件拷贝到项目的plugins文件夹下。
最后在使用python2.6时发现,用easy_install的语法是完全可以成功的,期间有一个安全验证,回答接受就能完成安装了。不需要生成egg的手工方式。另外,使用easy-install方式安装后好像应该对所有的项目有效,而上述方式似乎每个项目都要做一次。
这时再用trac-admin给yangwugui授权ACCTMGR_ADMIN。重启服务再次登录后就可以看到帐号插件的设置页面了。
在trac.ini中的帐号的设置如下:
[account-manager]
authentication_url =
force_passwd_change = true
hash_method = HtDigestHashMethod (说明:如果不指明,则生成的密码字符串和VisualSVN的不一样!)
htdigest_realm =
htpasswd_hash_type = crypt
password_file = d:/repositories/htpasswd (说明:VisualSVN的帐号文件)
password_store = HtPasswdStore
persistent_sessions = False
refresh_passwd = False
user_lock_max_time = 0
verify_email = true
这时,登录项目页面可以注册新用户了(假设没有更改过匿名用户的权限)。
在Python中绑定SVN
首先,下载SVN的Python接口包svn-win32-1.6.15_py_2.7.zip,
把解压出来的两个文件夹svn和libsvn复制到python的下述目录下:D:/Program files/Python27/Lib/site-packages。同时把以下划线打头的dll文件的扩展名改为pyd,有一个不是下划线打头的dll文件不用改。site-packages文件夹中的模块自动会导入使用,不用在python的搜索路径中增加。
其次,在管理员页面中可以添加SVN的数据库
第三,按上图中的说明执行命令同步数据库
visualSVN安装时没有把subversion的安装的bin的目录放到系统的path路径下,所以执行python中的代码是失败:找不到相关的dll和执行文件。
但是,结果总是失败!这个方法我上两次配置trac都是成功的,为什么呢?原因应该是出在svn-win32-1.6.15_py_2.7.zip和VisualSVN的2.17版本之间的不兼容性上面,visualSVN的版本号不是svn的版本号,在主界面中点击visualSVN的版本号链接,弹出对话框中显示对应的svn版本号,现在VisualSVN的版本号是2.17,对应1.6.16的svn。进一步研究发现VisualSVN的编译版本现在用的是vc9运行库,而不是vc6!
除非自己下载svn的源码自己编译,否则目前的网络上搜索不到python2.7所适用的visualsvn绑定,在visualSVN官网上有一个trac的整合包,但是python版本是2.5。
因而想干脆重新来过,不再安装python2.7,改装2.6,到python的官网上一看,简直冒火,2.6只有源码版本,没有了发布版,只提供了2.7和3.x的发行版。看来官方已经不怎么再理睬2.6版本了!
幸好,我之前有安装有备份,只有翻出原来的安装包重新来过,和上面的过程一样。然而一步一步做到最后,还是发现无法绑定subversion,因而怀疑是visualSVN的版本不对,改成2.1.5,对应的svn版本是1.6.15,和python的绑定版本完全一致,结果还是不行。为什么原来是可以的呢?
仔细查看之后发现,原来家里的服务器里有两个subversion的安装版本,一个是VisualSVN,一个官方下载的subversion(命令行)。在操作系统的环境变量path中引用的是subversion命令行的bin。因而绑定是成功的。照着同样在服务器上安装另一个版本的subversion,绑定就成功了。
由此看来,前面使用python2.7,也可以用这样的方法应该能成功,只要绑定python2.7的dll文件能和命令版本的subversion一起工作就行了。
第四,创建钩子及时更新源代码数据库中的变更,方法是在repository数据库中的hooks文件夹下增加批处理脚本,
其一是在d:/repositories/itschool/hooks/post-commit.cmd中包含下述命令:
@d:/Program files/Python26/Scripts/trac-admin.exe d:/tracproject/oschool changeset added "%1" "%2"
其二是在d:/repositories/itschool/hooks/post-revprop-change.cmd中包含下述命令:
@d:/Program files/Python26/Scripts/trac-admin.exe d:/tracproject/oschool changeset modified "%1" "%2"
在上述两个批处理中,传给 hook 的参数 1 是代码库路径。参数 2 是刚创建的修订版号。hook 的返回值被忽略。 @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显。
在配置过程中发现上述钩子函数不能正常运行,通过在命令行中添加echo的方式来调试,能确认cmd已经执行、而且参数传递也已经正常,而且trac-admin不抛出错误信息,但是查看源代码时发现并没有同步。当直接在控制台中手工执行cmd时又能正常同步,因而怀疑是参数的引号导致数据不能同步,结果把引号去掉还是不行。
最后在任务管理器中跟踪服务进程的执行用户,发现是network service,所以在tracproject/env的安全中增加该用户的写入权限。经测试,执行完全正常。
除了使用钩子而外,还可以采用每次请求来同步代码变更,方法是在trac.ini中设置repository_sync_per_request=<以逗号分隔的源代码数据仓库名称>。用该方法直接就能成功。不过要注意的是,代码库的名称如果使用”(default)”,不能成功,而要直接写代码库的名字,我这里是oschool。我想可能的原因是我的代码库是在db中配置的,而不是在trac.ini中配的,如果在trac.ini中配了数据库,那么trac应该能知道default是指哪个代码库。
安装可视化wiki编辑器
之前使用了一段时间的trac,感觉最不方便的就是在wiki写文字。太麻烦了,但愿这个编辑器用得舒服些。下载地址是:http://trac-hacks.org/wiki/TracWysiwygPlugin ,安装方式如下:
首先执行执行命令行:easy_install http://trac-hacks.org/svn/tracwysiwygplugin/0.12
在插件的管理页面中可以勾选启用该插件。
至此整个安装就结束,完全正常工作。
添加项目
所有的项目最好位于一个文件夹下,那么通过指定星号(*)和-e选项,在tracd中可以启动目录下的所有的项目,格式如下:
tracd.exe –p 8000 –basic-auth=”*,d:/repositories/htpasswd,ruandao.com” –e d:/tracproject
每次用trac-admin生成一个项目之后,需要在web页面中设定数据库,然后再执行repository resync <版本库名>,其中<版本库名>是trac中的名字,根据该名字trac可以找到版本库所在的目录,trac进一步使用python的subversion绑定库,然后设置post-commit钩子,就可以读取版本库中的源代码了。
使用trac的商用网站
查找trac的插件时发现提供了blog和talk功能的开发商,建立了一个对外服务的trac网站:https://www.coderesort.com,从外观看完全看不出是trac弄的,界面样子和文档的内容都已经彻底的改写了。