Monthly Archives: 三月 2009

在Linux上安装mod_wsgi文档中文翻译(二)


上节我们介绍了mod_wsgi,下面我们讨论怎么在Linux发行版上安装他们。
如果你使用的是Linux操作系统,可以直接从源代码安装。
在Linux上安装可能会遇到的问题,详情请见“安装指导”,如果你喜欢专门为你的Linux发行版准备的包,下面给出详细列表。
Debian 包
可以再这里找到Debian包的详细信息:
http://packages.debian.org/unstable/python/libapache2-mod-wsgi
感谢Bernd Zeimet对这个版本的打包的与编译。
Fedora 包
可以在这里找到Fedora包的详细信息,URL是:
http://download.fedora.redhat.com/pub/epel/5/i386/repoview/mod_wsgi.html
Arch Linux 包
Arch Linux包的详细信息可以在下面链接找到:
http://aur.archlinux.org/packages.php?ID=13394
感谢Nicolas Steinmetz在这个发行版上的与编译与打包
SUSE Linux 包
关于SUSE包的详细信息请点击如下链接:
http://software.opensuse.org/search?q=mod_wsgi
感谢Peter Poeml在这个发行版上的编译与打包
重启Apache服务
当在Linux上使用与编译的Apache时,他们一般将Apache的启动和停止功能纳入服务进行管理。在这
种情况下’apachectl’脚本将不能正常,这需要使用操作系统的具体机制去启动、重启和停止Apache服务。
在这样的操作系统利用’apachectl’重启Apache服务可能会出现如下错误:
httpd (pid 22361?) not running
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
不同Linux的服务管理也可能不同,你应该先阅读与编译版Apache的文档或者操作系统本身的手册
还有一种方法是直接使用“init.d”脚本
/etc/init.d/apache2 stop
/etc/init.d/apache2 start
还有一种方法是使用中间管理脚本使用“init.d”脚本
invoke-rc.d apache2 reload

mod_wsgi文档中文翻译(一)


什么是mod_wsgi ?
mod_wsgi的目标是实现一个简单的Apache模块,支持任何Python WSGI的接口的Python应用程序的托管。该模块适用于高性能生产的WEB站点,同时也适用于自己维护站点的WEB 服务托管(虚拟主机环境–译者注)。
运行模式
用mod_wsgi来托管应用,有两个主要的模式可以使用,一种是“嵌入式”模式,Mod_wsgi与Mod_python运行方式相同,所有的python代码都将在apache 子进程中执行。因此当WSGI应用在此模式下运行可以与其他的Apache托管的模块PHP和Perl共享形同进程。
另一个在UNIX Apache 2.*环境下可选替代的daemon模式,这种模式运作的方式在类似的FastCGI / SCGI解决方案,即在不同的进程运行WSGI应用。与FastCGI / SCGI解决方案不同的是,当执行WSGI程序时不需要单独的基础结构(infrastructure),一切都是自动处理的mod_wsgi。
一切都是自动处理的mod_wsgi,影响正常使用的Apache模块的PHP , Perl或其他语言的Apache子进程服务的静态文件和主机应用程序使用大大减少。守护(daemon)进程可能需要时也可以作为一个独特的用户运行以确保WSGI应用程序之间不能互相干扰或获取信息。
服务性能
该mod_wsgi模块是用C代码直接对内部的Apache和Python应用程序接口编程。因此,服务WSGI应用与Apache它具有较低的内存开销和性能优于现有的WSGI适配器mod_python或替代的FastCGI / SCGI / CGI或代理的解决方案。
虽然嵌入式技术模式能够表现得更好, daemon模式通常是最安全的选择使用。这是因为要嵌入模式高性能需要调整apache MPM设置,默认设置偏向于服务静态媒体和PHP应用。如果Apache 的MPM设置未与服务的应用相对应,将会表现出糟糕的性能而不是更好的性能。
因此,除非你非常熟悉Aapache的配置,否则推荐使用daemon模式,总体而言,大型Python Web程序,通常你不能看出嵌入式(embedded mode)和守护模式(daemon mode)明显的差异,因为瓶颈在Python Web和数据库访问上。
支持的应用
mod_wsgi遵循WSGI接口规范,任何符合WSGI接口规范的Python Web框架或者应用都可以被支持。
我们所熟悉的主要的Python web框架或工具,包括CherryPy, Django, Karrigell, Pylons, TurboGears, web.py, Werkzeug 和Zope 运行良好,我们所熟知的主要的Python web应用包括MoinMoin, PyBlosxom 和 Trac 能够很好的运行。
系统要求
mod_wsgi软件包可以编译和使用任何的Apache 1.3 , 2.0或2.2 UNIX系统(包括Linux ) ,以及Windows操作系统。无论是Apache MPM的单线程“prefork” 或者多线程的“worker”只能在unix/linux系统中使用。daemon模式的mod_wsgi仅限于运行于UNIX/LINUX环境的Apache 2.0或2.2上,而且要求Apache的基本运行环境库已经编译并支持多线程。
需要Python 2.3以上版本并且已经编译支持多线程,如果你想尝试Python 3.0,需要从Subversion仓库中下载源代码编译 mod_wsgi。
使用入门
最新的版本,并建议mod_wsgi是2.3
确保您首先阅读“安装与配置”,指南为开发者提供了获得Mod_wsgi 最大产出指导,也可以提供问题调试的协助或者提出问题。
如果你不明白你的应用出了什么问题或者你觉得你发现了Mod_wsgi的问题,你可以在mod_wsgi群组论坛中提出问题
资助
开发开源软件往往被认为吃力不讨好的事情,如果您想展示你对实际上一直在帮助你的软件的赞赏,作为一种反馈,你可以将你成功或失败等要说明的任何问题张贴到用户组中,通过你的反馈,人们才可以知道软件是否正确的工作着,软件或者文档如何改进,以更好的满足你的需要,如果这些听起来非常辛苦,至少在考虑帮助我们提升声望排名。
还请注意,与一些论坛上的传闻相反,这个项目与Google没有任何关系,也没有接受Google(或其他公司)任何形式的资助,唯一与Google有关系的是,该项目托管在代码自由和公开的Google代码托管服务商。这个项目的所有开发花费的都是我个人时间,如果你发现他对你有益,并且希望以更具体的方式捐助,请为我的Amazon上的愿望列表买单或者通过PayPal捐助,如果是作为公司的一笔小的捐款,可以提供报表或者发票用于会计。
祝用得愉快
Graham Dumpleton

Zend Framework学习笔记(二)


很多天没再研究Zend Framework了,趁着还有些闲时间,再次研究一下,Zend Framework学习笔记(一)中大概了解了一下Zend Framework的代码接口分布,《Zend Framework in Action》一书中给出的标准文件夹结构如下图:

个人觉得这个结构只适合很小的项目或者不太复杂的项目,因为zend Library是包含在项目里面与web_root同一级,假如我需要创建一个helloword_2的项目,那么不得不再复制一个同样的文件夹结构,Zend Library将会有两份,如果有十几个或者更多的这样的工程,那么Library将会有很多,Zend Framework是个很活跃的框架,没准哪天就升级了好几个版本,如果你需要升级或者打补丁,那么就会烦死。
当然在application下新建一个modules文件夹,将各个功能放在这里也是一个方法,但是你肯定不想一堆一点关联都没有的项目堆在一起,比如豆瓣的九点和群组,这两个几乎没有任何关联,当然实际应用中还有一个非常重要的用户模块。每个应用只做自己该做的事情,才会最大限度的独立很分散,无论是为了负载均衡进行多点发布还是代码维护都非常有用。而且所有的应用都通过一个入口(web_root中的index.php)和同一个分配器来处理,显然并发能力和容错能力都会下降,稍微有点差错,所有的应用都挂了。入口,分配器等属于全局的东西会影响所有应用,事实上可能很多东西对别的应用毫无用处,但是又有很多应用又需要,这时候就产生了浪费。
不过Zend Framework是个自由度很高的框架,可以自己定义一些东西,让Library从项目中独立出来,与项目目录平级,每个项目拥有自己的独立名称、web_root、入口和分配器,这样做可以为每个项目单独添加Vhost,升级内核(zend Library)也只要升级一个即可,有更高的自由度和松散度。所以我推荐如下的结构:

图中的test是一个项目名,请注意是项目名,不是功能名称,在application中你可以为这个项目建立很多modules,我在图中没有建立这样的文件夹,你可以建立test2,test3……项目,这些项目毫不相关,或者关联度很低,比如用户就得是一个独立的项目,其他的功能可能是一个或者几个独立的项目,事实上还有更好的目录结构,我是从神仙那里学过来的.在controllers文件夹中建立front, backend, amdin,三个文件夹,在view中也建立对应的文件夹,放在front中的内容不做任何限制,backend中需要登录,admin就不用说了,渲染views中对应文件夹的模板,全局进行权限控制,似乎神仙这样的结构不能提供精细访问权限,zend Framework提供了这样的精细权限控制。
如果你的代码要改成左图的结构,需要改动一些代码,首先是需要在入口文件中注册这些目录的位置代码如下:

define(’APP_PATH’, dirname( dirname ( __FILE__ ) ) );
define(’LIB_PATH’, dirname( APP_PATH ) . "/library");
date_default_timezone_set(’Asia/Shanghai’);
//directory setup and class loading
set_include_path(’.’ . PATH_SEPARATOR . LIB_PATH
. PATH_SEPARATOR . APP_PATH . ‘/application/models’
. PATH_SEPARATOR . get_include_path());
 
include "Zend/Loader.php";
Zend_Loader::registerAutoload();
//set up controller
$frontController = [...]

发布修改过的Wordpress纯白主题一枚


本主题的原作者是Bob,主题的底部有这位作者的连接,这里我已经附上,我主要是重写的CSS和functions调用,主题的宽度是1200像素的,可能很多人鄙视我设置这样高的像素,但是我更喜欢这样的宽屏界面,虽然现在还是有很多分辨率使用的1024宽度,不过从访问我博客的用户群看来,这样的屏幕占的比例很小,所以我斗胆弄这么大的分辨率。
特别介绍一下,我修改过的代码通过了W3C验证,通过IE6,IE7, firefox 3.0.7 safari 3测试。
我本来没打算发布这个修改过的东西,因为本身就不是我的东西,所以主题中的主题预览都是完整的保留原来的界面预览,以示对原作者的劳动成果的尊重。今天(2008-03-19)打开豆瓣发现有位朋友豆油我,问是否可以共享主题,本来这个就是共享的东西,当然依然可以共享,所以在此就献丑发布一下。如果你在我的基础上又增加了新的修改,而且把它变成了收费的商业模板或者利用修改过的模板牟利(捐助除外),那么请通知一下原作者,至于是否需要我,就随你便了,方便的话,让我也高兴一下,当然,我保证不会从你得到的利润中分去半点,你甚至可以不必通知我。
我在底部留下了由我修改的标记,不是为了增加反向链接,仅仅是为了如果是因为我发布的主题本身出错了,你可以方便的找到我。如果你认为没这个必要,或者觉得碍眼,可以在主题包中的footer.php找到相应的代码删除之,不会删又确实要删的,请在本文后面留言,我尽可能协助。
使用说明
1、使用这款修改过的模板需要你手动修改一个文件,将 header.php中我的导航改成你需要的即可,代码如下:

<div id="menu">
<span ><a href ="/about" target="_blank">我的经历</a></span>
<span ><a href ="http://cuiyusong.blogbus.com" target="_blank">在BlogBus的日子</a> </span>
<span ><a href ="http://delicious.com/aaaacccc" target="_blank">Delicious</a> </span>
<span ><a href ="http://www.douban.com/people/cuimuxi/" target="_blank">我在豆瓣</a></span>
<span ><a href ="http://www.flickr.com/photos/muxi" target="_blank">Flickr</a></span>
<span ><a href ="/contact/" target="_blank">找我聊天</a></span>
<span ><a href ="http://muxi.mp" target="_blank">Chi.mp</a></span>
</div>

改成你需要的连接和文字即可,如果你不需要这么多的导航,删除几个即可,如果你不喜欢这个导航,直接将这段代码从文件中删除即可,不会的朋友,请在本文后面留言,或者找我
2、将文件夹传到 /wp-content/themes/中
3、打开你的后台,在模板设置中找到limauorange 这个主题,启用之。
下载链接: Box.net

Python和其他语言数据类型比较


静态类型语言
一种在编译期间就确定数据类型的语言。大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保证这一点的。Java 和 C 是静态类型语言。
动态类型语言
一种在运行期间才去确定数据类型的语言,与静态类型相反。VBScript 和 Python 是动态类型的,因为它们确定一个变量的类型是在您第一次给它赋值的时候。
强类型语言
一种总是强制类型定义的语言。Java 和 Python 是强制类型定义的。您有一个整数,如果不明确地进行转换 ,不能将把它当成一个字符串。
弱类型语言
一种类型可以被忽略的语言,与强类型相反。VBScript 是弱类型的。在 VBScript 中,您可以将字符串 ‘12′ 和整数 3 进行连接得到字符串’123′,然后可以把它看成整数 123 ,所有这些都不需要任何的显示转换。