::-- ZoomQuiet [2005-06-21 12:22:39]

http://karrigell.sourceforge.net/images/karrigell_skeudenn.png 永远安心工作的“推车”!

1. 概述

Pure Python 实现的又一个 Web 应用平台!

2. 体验

http://karrigell.sourceforge.net/images/karrigell_text.png

::-- ZoomQuiet [2005-06-21 12:22:39]
  • 因为有一个快速开发一套轻型的项目管理平台的任务,在丰富的Python Web Application Frameworks 中间徘徊了几日:
    • Zope ?! 太高级了,部属,开发都有门槛!管理的简便并不能抵消开发效率的问题
    • CherryPy ? 太好玩了,也太简单了,什么都要自个儿来…………而且上次的体验是被不完全的 Session 击中要害无法完成任务,升级了?但是不敢再玩……

    • Snakelets ?! 以丰富而非常个性的开发模式著称,我想的是 PythonIc 的爽直!

    • Quixote -- 唐吉诃德!!豆瓣的动力!!嗯嗯!深以为然!可是花了半天才明白如何运行 demo,也才知道任何修改都要重启服务!!
    • Karrigell -- 好象丰富的功能,但是都不安装到 Python 环境目录中的东西哪………………
      • 呜乎哀哉!默许的 debuging 守护的运行模式,可以自动加载你的修改,让站点的开发象PHP 的站点组织一般进行!爽呆了!爱之!

2.1. instant_site

最新版本的 Karrigell 提供整站创立支持! 感谢 broader <broader.zhong@gmail.com> 的列表分享!

1 启动karrigell,即直接运行karrigell.py程序
2 在浏览器地址栏输入-》
http://localhost/instant_site/index.ks/index
3 选择app_buzhug,点击ok按钮即可
4 出现以下页面信息
Script app_buzhug.ks generated
Test it
Back to configuration
可以选择Testit,进入下一页面,
login时,用户名:admin,口令:admin

其它若有问题,可看一下程序代码,不是很复杂。

2.2. 惊奇的调试

:snap-Karrigell-debug.png

  • Karrigell 将页面的 debug 作到了极点!! 在问题页面中点击 Debug 按钮会弹出双帧的 调试信息窗口!
    • 左帧定位你出错的代码
    • 右帧整理汇报所有断点时内存的对象情况!!
    • 天!!就象编译C程序时一般!! 伟大的Python!!!

2.3. Livin Leo

:snap-Karrigell-Leo.png

生活在 Leo 中!

哈哈哈!凡是 Pure Python 的站点应用开发,配合Leo 简直太舒服了!

  1. 按照目录分类分层指引文件,自然,习惯;
    • 进一步的,你可以随时按照你自个儿的理解进行进一步的逻辑分类,折叠入中文说明的 headline 中
  2. 随手可以将技术笔记也收集在工程中,方便!
    • 配合 txt2tags 你可以随时获取不同格式的标准输出文档来分享

  3. 使用 @nosent 标记符来声明文档类的树,不用象 @root组织时每页都要加 @c, 省心!

    • 只是小心,这样一来你代码的 Leo 对象树化的信息只存在于 .leo 文档中,一但有任何意外,你将无法对应的从生成的文件中恢复回来
  4. 使用 @thin 标记符来声明脚本的树,不在 .leo 文档中记录代码,以便团队协作时的分享传送

  5. 使用节点的clone 操作,组织各种经常性修改的代码部分在手边,而同时不破坏实际的对象继承设计!

    • 可以看到我将 DB 支持部分的SQL操作字典,统一调用的JS,站点的总帧设计等等部分代码汇集在常用代码 中,随着我编辑的关注中心随时随地的移动,修改,而又没有变动实际的运行脚本——因为它们根本没有从常用代码树的位置输出为真正的文件!

2.4. 我们的体验

2.4.1. lv yi ~装在推车里的暴风雪

lv yi <lvscar@gmail.com>

2.4.2. Moyan的MVC设计

  • KarriMvc -- 以TurboGears 的大框架的思路快速利用现有的软件组合成自个儿的 MVC 框架!

2.4.3. limodou's Blog文章

收集有关 KarriGell 的资料

::-- limodou [2005-06-22 10:39:55]

有关KarriGell的Blog文章的收集

2.4.4. Rockety的开发体验

2.4.5. Zoomq的快乐体验

2.4.6. 作为服务守护

思路
  • Windows 下面——不用想了,M$不会让你这么玩的…………
  • Uunix 下面——太太自然了,和一切服务一样!伪造成服务类的脚本来启动就好!
  • FreeBSD 环境中
  • # running Karrigell as srv
    echo
    echo "running K!"
    cd /path/to/u/Karrigell
    /usr/local/bin/python Karrigell.py 2>/var/log/K.log &
    echo
    exit  0
    • 标准的输出导向,就可以将Karrigell 丢到后台运行了

    2.4.6.1. rcNG

    利用FreeBSD 的优秀工具,可以更加标准的管理Karrigell 服务!

    • FreeBSD 扩展应用程序配置 有脚本模板

    • 改进现有启动脚本:runK.sh

      # running Karrigell as srv
      echo
      echo "running K!"
      cd /path/to/Karrigell
      # 使用 daemon 命令来记录运行 pid
      /usr/sbin/daemon -p /var/run/karrigell.pid /usr/local/bin/python Karrigell.py 2>/var/log/K.log &
      echo
      exit  0
    • 创建 rcNG 脚本在 /usr/local/etc/rc.d 中,比如说叫:karrigell.sh

      #
      # PROVIDE: karrigell
      # REQUIRE: DAEMON
      # KEYWORD: shutdown
      
      #
      # DO NOT CHANGE THESE DEFAULT VALUES HERE
      # SET THEM IN THE /etc/rc.conf FILE
      #
      karrigell_enable=${karrigell_enable-"YES"}
      karrigell_flags=${karrigell_flags-""}
      #karrigell_pidfile=${karrigell_pidfile-"/var/run/karrigell.pid"}
      # 奇怪的模板指示,两种声明方式都可以
      karrigell_pidfile="/var/run/karrigell.pid"
      
      . /etc/rc.subr
      
      name="karrigell"
      rcvar=`set_rcvar`
      command="/path/to/u/runK.sh"
      # 因为不是直接运行的进程,所以要给 rc.subr 一点提示,声明真实运行的进程特征
      procname="/usr/local/bin/python"
      
      load_rc_config $name
      
      pidfile="${karrigell_pidfile}"
      
      start_cmd="echo \"Starting ${name}.\"; /usr/bin/nice -5 ${command} ${karrigell_flags} ${command_args}"
      
      run_rc_command "$1"

    最后在  /etc/rc.conf 中追加

    #rc_debug="YES"
    #060421 rcNG Karrigell
    karrigell_enable="YES"
    ## 特别注意BSD 中的语法约定,不能有空格,这里!
    • 唉呀呀!好也!就可以通过

      #/usr/local/etc/rc.d/karrigell start
      #/usr/local/etc/rc.d/karrigell stop
      的标准方式来进行服务管理了

    2.4.7. ccnusjy的多线程Karrigell 增强

    3. 反馈

    如果你有不同的体验,讨论吧!

    • 仔细读了文章后,对karrigell很有好感。像php那样简单。比php样式更多。cherry的对象方式确实比较繁琐。不过,可能适合搭建庞大站点吧。by tomz
      • 咦咦咦?兄台非常紧密的关注啄木鸟的Wiki 哪!刚刚写了一部分就已经有反馈了!谢谢捧场!
      • 其实 Karrigell 也提供 CherryPy 类似的 Pure OOP 发布的格局,即日所谓 .ks (Karrigell Service 模式) 的页面,但是就开发的快捷体验来想,有时候一定程度的 HTML 代码的混合是必要的,直观哪! 而且,使用 PythonIc 的 设计,本身也可以支持大型站点的快速组建的,主要是设计思想...

      • 我现在就是将站点所要操作的现实数据对象映射为py 的类树,Karrigell 仅仅负责将各种类的实例以页面的形式展示…… -- ZoomQuiet

    • 谢谢你的文章! 我对Web开发了解很少,以前一直作桌面应用,用C++。现在有一个项目需要开发一个Web Application,最近几天花了不少时间寻找方案。对于Karrigell,我简单的试验了一下,但是因为我知识有限,所以有些问题还是不清楚,想向你请教:
      • Karrigell自己的Web Server 效率比Appache如何? 我猜这个Web Server只是用来测试的吧?实际应用中也可以用吗
        • Karrigell 也在发展中,实际上,MoinMoin 一种高级维基系统也不过是使用Python 自个儿的CGI 接口来发布信息的,还有Quixote 豆瓣网的基础动力,可以说Python 的Web 服务响应能力是不差的,何况你可以使用各种Cache系统来辅助支持? -- ZoomQuiet

      • 使用Appache的时候,我看它的文档说的是用Appache作桥梁,将请求转发到Karrigell自己Web Server上,我不明白的是,这难道不是白白浪费效率吗?
        • 同上,不过是为了和其它已有站点兼容发布
      • 关于模版,看起来就像是字符串替换而已,这样效率是不是很低? 另外,关于多国语言的方案,我看它的文档中也是很诡异的的,居然用英文原句作为索引去检索其他语种. 还有,如果我希望图片等也可以根据语言设置更换,应该怎么做呢?
        • 理解思路后,自个儿写哪,所谓国际化开发,也不过是字串的自动替换原理一样的…………
          • 再次感谢!
    • 谢谢你的回复。我先做一个原型系统试验一下。另外关于模版,我昨天看了Zope的 zpt,我觉得他的一个feature非常好,就是他的模版文件直接用ie打开就可以看到和最后实际产生的页面类似的效果。而Cheetah的模版文件其实只有程序员才容易看懂。不知道在Karrigell里能不能用zpt呢?

    KarriGell (last edited 2009-12-25 07:13:01 by localhost)