CGI没有执行python - 500内部服务器错误

时间:2011-01-05 15:19:13

标签: python apache2 cgi cgi-bin

我有一些我想要执行的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

py文件只是打印一些应该出现在页面上的文本。 我该怎么办? 感谢

[edit]:更新,它与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转换为int似乎是一个错误:

zoom_factor = int(parms.getfirst('zoom')) * int(parms.getfirst('zsize'))

有关如何进行此类转换的任何提示?

2 个答案:

答案 0 :(得分:1)

您没有加载wsgi模块。

LoadModule wsgi_module modules/mod_wsgi.so

此外,您只需要安装mod_wsgi或mod_python。除非您有特殊需要,否则不要两者都这样做。

答案 1 :(得分:1)

如果parms.getfirst('zoom')或parms.getfirst('zsize')返回None,你可能不会在你的URL中提供这些(?dunno这些parms是什么,只是猜测)。定义缺少这些行为时所需的行为(它是否意味着“0”缩放,或者因为你是乘法,“1”更有意义吗?)。

然后创建自己的转换函数,该函数知道如何将None转换为int(取决于您定义的行为)并调用它而不是int()。

def convert(value):
   if value is None:
      return 0 # or 1, or whatever
   else:
      return int(value)