CGI未执行Python - 500内部服务器错误
我有几个Python脚本想要运行,以下是我的配置: Ubuntu 10.04,Apache2,Python 2.6,已经安装了mod_python和mod_wsgi。
我按照以下网站的说明进行了操作:
http://bytes.com/topic/python/answers/474462-apache-python-ubuntu
http://apache.active-venture.com/cgi-configure.html
http://modpython.org/live/current/doc-html/inst-testing.html
http://code.google.com/p/modwsgi/wiki/QuickInstallationGuide
http://wiki.apache.org/httpd/DistrosDefaultLayout
在sites-available中的默认文件:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AddHandler mod_python .py
AddHandler cgi-script .cgi py
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
我遇到了500内部服务器错误。 我还把文件的权限改成了755。
这些Python文件只是打印一些文本,应该显示在页面上。 我该怎么做呢? 谢谢。
[编辑]:更新,问题和py文件中的错误有关 下面是错误日志。
Traceback (most recent call last):
File "/usr/lib/cgi-bin/amissa2.py", line 80, in <module>
zoom_factor = int(parms.getfirst('zoom')) * int(parms.getfirst('zsize'))
TypeError: int() argument must be a string or a number, not 'NoneType'
看起来是在这里发生了从None到int的转换错误:
zoom_factor = int(parms.getfirst('zoom')) * int(parms.getfirst('zsize'))
有没有什么提示可以告诉我如何进行这样的转换呢?
2 个回答
你没有加载wsgi模块。
LoadModule wsgi_module modules/mod_wsgi.so
另外,你只需要安装mod_wsgi或者mod_python中的一个就可以了。除非你有特别的需求,不然不需要同时安装两个。
如果parms.getfirst('zoom')或parms.getfirst('zsize')返回的是None,那可能是你在URL中没有提供这些参数(我也不知道这些参数是什么,只是在猜)。你需要定义一下当这些参数缺失时你希望程序怎么处理(比如说,缺失了是代表“0”倍放大,还是因为你在做乘法,所以“1”更合理?)。
然后,你可以创建一个自己的转换函数,让它知道如何把None转换成整数(这要根据你之前定义的处理方式),并在需要的时候调用这个函数,而不是直接用int()。
def convert(value):
if value is None:
return 0 # or 1, or whatever
else:
return int(value)