windows下的Trac安装配置

之前在ubuntu下装过几次,这下因为事先已经把svn装在了windows下,因此要在windows下再装一把.

还算比较简单,主要参考了rocksun的文章(原文出处找不到了…)以及bugx的文章(http://blog.nowans.com/content/log.2007.1.25.191.html).

我自己遇到了哪些重点问题再记录一下.

首先是下载各大安装包.

Python: http://www.python.org/ftp/python/2.4.4/python-2.4.4.msi
Clearsilver: http://www.clearsilver.net/downloads/win32/clearsilver-0.9.14.win32-py2.4.exe
Pysqlite: http://initd.org/pub/software/pysqlite/releases/2.3/2.3.2/pysqlite-2.3.2.win32-py2.4.exe
svn-python: http://subversion.tigris.org/downloads/svn-python-1.4.4.win32-py2.4.exe
Trac: http://ftp.edgewall.com/pub/trac/trac-0.10.4.win32.exe
其次先装Python,然后你可以考虑按照上步的顺序依次安装.这里有个重点就是这台机器之前已经装过python了,是在安装plone时自带的,但没有注册到系统中,所以pysqlite安装时会不认,不得不重装了个2.4版本的.这台机器之前还装过了svn,但装的是svn-win32版本的,所以trac安装时也会不认,不得不补装个svn-python.这样就应该可以顺利到安装完所有的工具了.最后提醒一下要在path里增加python安装的路径.

然后配置svn(这里不敖述,主要是svnadmin create得创建一个代码仓库).

最后配置trac.

前提: trac安装时相关命令都默认放在了python安装目录下的scripts目录中.

1) 创建项目(假设叫目录叫trac,项目名叫sdk,当然相同更好)
python.exe trac-admin d:\trac initenv
注意输入项目名和项目对应的SVN仓库地址,这一点和linux下trac配置相同.

2) 创建用户
python.exe trac-digest.py -u cyndi -p 123456 >> d:\trac\passwd.digest
注意这里的trac-digest.py哪里来呢?
这一步linux使用的是htdigest命令来创建用户,可是windows下大部分人是使用apache工具的,但我不打算再装个apache,因此借鉴了bugx的一篇文章.

把下面这段代码存为trac-digest.py(可以放在python安装目录下的scripts目录中):

  1. from optparse import OptionParser
  2. import md5
  3.  
  4. # build the options
  5. usage = "usage: %prog [options]"
  6. parser = OptionParser(usage=usage)
  7. parser.add_option("-u", "--username",action="store", dest="username", type = "string",
  8.                   help="the username for whom to generate a password")
  9. parser.add_option("-p", "--password",action="store", dest="password", type = "string",
  10.                   help="the password to use")
  11. (options, args) = parser.parse_args()
  12.  
  13. # check options
  14. if (options.username is None) or (options.password is None):
  15.    parser.error("You must supply both the username and password")
  16.  
  17. # Generate the string to enter into the htdigest file
  18. realm = 'njg'
  19. kd = lambda x: md5.md5(':'.join(x)).hexdigest()
  20. print ':'.join((options.username, realm, kd([options.username, realm, options.password])))

3) 授权用户
trac-admin d:/trac/ permission add cyndi TRAC_ADMIN
注意这里TRAC_ADMIN是超级管理员权限,这一点和linux下trac配置相同.

4) 启动Trac
tracd -p 8000 –auth *,d:/trac/passwd.digest,njg d:/trac/
注意事实上第2)和第3)步是可以忽略的,没有用户trac也一样用,如果不使用用户管理的话,启动trac可以这样:tracd -p 8000 d:/trac/,这一点和linux下trac配置相同.

补充一点:上面这个auth前面是两个-,p前面是一个-.

Comments (18)

小咪的生日

今天是小咪的生日,可是它的哥哥和姐姐却偏偏在今天晚上登上去厦门的飞机进行为期三天的旅行,很舍不得咪,也许是咪在我们家真的很可爱,我们都很宠它,去年的8月28日宏把它带回来了家,我们猜它估计两个月大吧,所以6月28日就成了它的生日,今天下班的时候特地在珠江路下了车,到面包家族挑选了一个蛋糕还要了一根蜡烛.

当然,给咪过生日,实际上它是不会买我们的帐的,所以还给它准备了妙鲜包,一切生日该有的仪式,小咪一样不少~~

生日蛋糕和妙鲜包合影….

img_0571_1.jpg

硬是把咪给抱过来了,小样竟然连妙鲜包都引诱不了它了…

img_0576_1.jpg

下面这张宏不同意公布,口头描述一下吧:

鉴于咪不会许愿,这个工作就有宏代替了,宏像模像样的许了一个好长时间的愿望而且还不肯透露给我和小咪知道…..

到了厦门了,从飞机降落时穿过云层就能感受到厦门上空的可见度很高,夜里12点月圆风轻..

img_0578_1.jpg

酒店的房间看出去,不远处就是矮矮的山.

img_0583_1.jpg

img_0582_1.jpg

Comments (10)

备忘2

6.使用asp.net的fileupload控件上传文件,需要注意几点:
A)上传目录必须对ASPNET用户有可写权限.
B)默认文件大小被限制为4M,需要修改machine.config增大它.
C)通过验证控件限制文件类型:

  1. ErrorMessage="Only mp3, m3u or mpeg files are allowed!" 
  2. ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))
  3.     +(.mp3|.MP3|.mpeg|.MPEG|.m3u|.M3U)$" 
  4. ControlToValidate="FileUpload1">


D)通过服务器端验证文件类型:string fileExt =  System.IO.Path.GetExtension(FileUpload1.FileName); if (fileExt == “.mp3″)…

 7.Repeater这个控件没法帮你传递Row中的信息,所以常用.Items[i].FindControl这种方式取得某行的子控件,需要注意的是,这只能得到客户端该控件的用户行为,比如说checkbox控件是否被选中,但没法传递数据,因为这样是不行的,得不到Text的值的,用因此,这里可以使用数据源来传递数据,如下代码段:

  1. for (int i = 0; i < this.slidelist.Items.Count; i++)
  2.                         {
  3.                             if (int.Parse(dt_source.Rows[i]["intID"].ToString()) + ", ") > 0)
  4.                             {
  5.                                 HtmlInputCheckBox cb = this.slidelist.Items[i].FindControl("CheckBox1") as HtmlInputCheckBox;
  6.                                 cb.Checked = true;
  7.                             }
  8.                         }

 8.取得行号的方法在datagrid和repeater中不一样.
datagrid是Container.DataItemIndex,而repeater则是DataBinder.Eval(Container,”ItemIndex”).另外,datagrid在winform中的使用和repeater相同.

Comments

备忘

我这个人记性实在太差,费劲心思做出的答案,往往一转眼就忘掉了,偏偏答案忘了也就算了,却还会记得问题,如果问题也忘了我也就清静了,一切从头来过,可是就算所有人都不记得了,我却能把以前曾经发生过什么问题记忆的一清二楚,只是忘却了这个问题当初是怎么解决的…..

所以,我必须把FAQ记下来:

1.向文件里写数据,关闭文件之后,却发现只写入了一部分内容,其余被截断了.这是为什么?

检查是否调用了flush函数,如果没有,则内存里的内容不一定全部能写入文件.

2.做模板时,可能需要替换$A$为一个控件的内容,比如替换为DetailView控件的内容,这样可以利用控件方便的绑定数据产生html脚本,如何做呢?

利用控件的RenderControls函数,贴代码吧:

                System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
                System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
                DetailsView dw = new DetailsView();
                dw.DataSource = ds.Tables[0];
                dw.DataBind();
                dw.RenderControl(oHtmlTextWriter);
                content = content.Replace(”$VDetail$”, oStringWriter.ToString());

3.使用ObjectDataSource控件时,如果动态修改了SelectMethod属性,会出现一种怪现象,比如原先SelectMethod=A,SelectParameters为空,修改后SelectMethod=B,SelectParameters有两个参数.当点击页码查看下一页时,进入到Page_Load时发现,SelectParameters仍然为两个参数,而SelectMethod还原成A了…..

解决方案一:根据MSDN上的示例用法,尽可能不去修改SelectMethod,而仅修改SelectParameters的个数,也就是将B函数写成A函数的不同参数个数的重载函数….这个真是晕…..还有修改参数时不要忘了调用:ObjectDataSource1.SelectParameters.Clear();

解决方案二:没试过,但我想如果自己重载GridView的分页函数,重新绑定一下SelectMethod应该也是可以解决的….

4.当在GridView_RowDataBound的函数中,需要判断DataKeys的值时,应注意DataKeys数组的下标是相对当前页的index,而非整个数据集的index,因此可以这么用:

index = e.Row.DataItemIndex - gvVulnerabilities.PageIndex * gvVulnerabilities.PageSize;
this.gvVulnerabilities.DataKeys[index][”Owner”].ToString();

5.当从列表界面进入某记录的编辑,编辑后想要返回原列表界面的做法:

由于编辑完提交时页面进入PostBack状态,已经丢掉了原先的来源URL,因此假借session帮个小忙,当!Page.IsPostBack时,调用 Session.Add(”url”, Request.UrlReferrer.AbsoluteUri);当Page.IsPostBack时,调用
if (Session[”url”] != null)
    {
     string tmp = Session[”url”].ToString();
     Session.Abandon();

     Response.Redirect(tmp);
    }
PS:要注意的是,当链接来自于地址栏输入或者按钮用window.location的方法都会使UrlReferrer为null,但服务器端使用Response.Redirect是可以的.

Comments (1)

美美的照片片-美美的栖霞山

如果我再努努力,看来这里就会变成图片日记了,呵~

昨天和小宏还有哥哥一起去了栖霞山,如果你还没有去过,强烈推荐你一定要去!

去年的夏天第一次去,当时第一感觉就是真漂亮,我向来不太喜欢山,以为也就是个小破山,有点树就完了,可是没想到踏上上山的小路,可以说是一步一个风景,满眼的绿色,游人很少,山里很幽静,很秀气,都说栖霞山美在二月枫叶红,我去的季节虽然看不到红叶,但满山的绿色也煞是好看,因为去了寺里许愿,因此今年特地带上新相机去还愿.

虽然是第二次去,还是让我不住的惊叹于景色的美丽,植被率很高,有很多我叫不出字的花花草草还有树,常常让我有种置身于森林的感觉,小小的插曲,这次上山仍然没走正门买票,是位司机师傅带上去的,他还充当了我们的导游,从下午4点一直逛到7点,走了很多没走过的小路,可惜不好意思让司机师傅等,很多照片没有细细推敲,拍糊了很多,也有很多出现了曝光过度.

下面开始上照片片了哈,由于宏用的是定焦的镜头,所以拍人的基本景就虚化了,所以照片主题是:哪张人像最美咧?哈哈~~~

实际上下面这两张后来看看焦距都没对的很准,可惜了…

dsc_0481.jpg

dsc_0508.jpg

下面这张半身出镜的就是带我们上面的司机师傅.

dsc_0531.jpg

dsc_0551.jpg

下面这张有我的新相机850 IS哦,可惜我又要陪司机师傅聊天又要爬山,拍的都很少,其中又有很多因为下山的时候腿抖导致拍糊掉了…以后有机会再给大家看我拍的照片吧~:)

dsc_0555.jpg

我们家的宏宏~

dsc_0559.jpg

dsc_0569.jpg

下面这张事实上本来想展示的是我手指向的葡萄沟,可惜镜头里啥也看不清,全虚化掉了…

dsc_0571.jpg

dsc_0585.jpg

dsc_0590.jpg

dsc_0592.jpg

下面这张不小心让宏宏的哥哥曝个小光哈~~希望哥哥如果看到了,表生气哈~

dsc_0608.jpg

最后是我和宏的合影,有点曝光过度了,这已经是后期PS处理过了,还是…

dsc_0610.jpg

Comments (63)

咪的照片

宏新买了D80之后,每天乐呵呵的背着这个大家伙上下班,还拐到两个同事的镜头回来.下面只是小小的透露几张,拍的还算挺美的吧?不过,由此我也得出了一个结论:要想拍的美美,只需要好镜头!所谓摄影技巧,哈哈,整个被忽视了哈~:)

 dsc_0289.jpg

dsc_0302.jpg

dsc_0307.jpg

Comments (49)

计划-Plan

这么久没写blog了,几乎是从地震震坏了光缆开始,后来就觉得这里速度实在是太慢了,我无法忍受,因此很多时候即使有想法有总结也懒得爬上来blog了,当然这些都可以理解为理由:)

昨天看程序员,突然觉得自己曾经学过的东西就快要不属于自己了,心中一阵恐慌,于是敢紧整理了一下,立了个计划,即使是遇到困难也希望自己能够坚持下去把它完成.这期的程序员有篇文章是请到几位业界名人来谈谈各自的程序员经历的,对比自己,原来远远不如他们的细水流长,如果退回到二年前,我应该选择在程序员的道路上继续走下去,五年或者更久,这种积累才真正称的上是有技术的沉淀吧,冒然的进入管理的大染缸,加重了我的浮躁,几乎快要丧失持续学习的能力了,这种情绪一直笼罩着我.

话不多说,想找回曾经的我,因此定了这样的计划,不设deadline,因为可能被其它事情打断,但希望不中止这个计划.

目标:写一个blog

步骤和要求:

1.要有良好的数据库设计
  a)SQL进阶一下
  b)数据库理论的书找出来再理解一遍
  c)存储过程系统的学一遍
  d)数据库索引建立和视图建立

2.用.net 2005开发
  a)把2.0的控件进阶一下
  b)把类好好的设计一下

3.使用Ajax和RSS技术
  a)用asp.net的ajaxtoolkit来实现
  b)加上对RSS的支持

这两天要先把需求分析做出来,然后就当是做项目吧,把它好好的做下去.

做完这些,还要找些时间把下面的内容系统的学完.
a)图论
b)编译原理
c)数据结构
d)正则
e)设计模式

Comments

2007 Post

好多天没有写blog了,实在是网速太慢了,每次试图打开这个Write Post页面都未果,哎…..好吧,也承认我懒啦~

转眼之间就2007了,祝愿自己和家人一切平安吧,其它的下次再说,今天马上要回家了,就来睬个爪滴~嘻嘻!

Comments

Blog使用习惯

对于WorldPress,我实在有些用的说不过去的地方要记下来!
1.看文章的时候发现错别字,没法Ajax的去编辑它.这导致错别字越来越多,越多还越不去纠正.
2.皮肤的CSS和编辑文章时的richbox中不是所见即所得.
3.看文章的时候想插图片没法插,除非重新编辑它.难道不能Ajax么?

偶要自己重写一个Blog!(画外音:你能坚持下来么?哼—snow注)

Comments

和咪一起的生活

今天下班和snow一起去金润发,买东西的时候不自觉的就讨论起来”那个垫子买给我们家咪用,肯定会很舒服”,”那得看咪喜欢不喜欢啊”,哎,咪的待遇真是好啊,连我们家的购物都把它特别考虑进去了,结账之前又讨论”要不要给咪买罐头”,”不买,吃太多胖死它”…咪最喜欢吃妙鲜包和猫罐头了~

回家里迫不急待的把垫子给咪铺好,就放在取暖器的边边上,大家看~:

咪和它的漂亮垫子

无奈想尽方法,小咪也不肯屈就于这个垫子,哎….即使snow把它硬是按在垫子上,一松手小咪就跑了~真是心机白费啊~

看出来了吧,小咪在我们家地位甚高啊~再放几放以前小咪的生活照吧~:)

宏在给咪扣眼屎,哈哈

这是宏在给咪扣眼屎,宏非常热衷于这件事,哈哈~

这是咪的经典pose

这是咪的经典pose,就是这样优雅的站着,看着你…

dsc00153.JPG

偶尔也趴在桌子上看着你….

另一经典pose

咪的另一经典pose,宏常说咪又蹲成长方体了,也正是因为这个pose,宏常说咪很肥…

两两相忘

两两相望,这个包包也是咪最喜欢待着的地方~

dsc00099.JPG

可爱吧~窝在被子上面,小咪经常喜欢钻到被子里面睡觉,一觉就是好久~

咪睡觉姿势

这是咪睡觉时的常用姿势,可能这样特有安全感吧,可爱哈~

见识一下咪忧郁的眼神和缩骨功

见识一下咪忧郁的眼神和缩骨功哈~咪休息的时候总是把两只前腿摆摆好,就是这个样子~

dsc00050.JPG

这个是咪的写真,它正睡的香咧~

 PS:这些都是咪不同时期拍的,但小时候的照片不知道放哪里了,所以可能看不出它长的很快,其实咪刚来我们家的时候小的一点点,是用一个小笼子装来的,现在咪恐怕连脑袋都放不进去了,呵呵~

Comments

« Previous entries · Next entries »