.cgi与Web服务器的问题

时间:2009-03-07 14:01:33

标签: python cgi

The code

#!/usr/bin/env python

import MySQLdb

print "Content-Type: text/html"
print 
print "<html><head><title>Books</title></head>"
print "<body>" print "<h1>Books</h1>" 
print "<ul>"

connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db') cursor = connection.cursor() cursor.execute(“SELECT name FROM books ORDER BY pub_date DESC LIMIT 10”)

for row in cursor.fetchall():
    print "<li>%s</li>" % row[0]

print "</ul>" 
print "</body></html>"

connection.close()

我将它保存为test.cgi到我的网络服务器。我通过www.mysite.com/test.cgi运行它失败了

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

你怎么解决这个问题?

第一个答案后

[edit]

  1. test.cgi是可执行的(我运行$ chmod + x test.cgi)
  2. 我使用Apache。
  3. 我在.bashrc导出PATH = $ {PATH}:〜/ bin
  4. 安装了Python模块MySQLdb。
  5. 代码没有智能引号。
  6. 第二个答案后

    [edit]

      

    因为你,你得到了这个错误   没有安装MySQLdb模块   Python需要与MySQL通信   数据库

    我将MySQLdb安装到我的系统中。该模块有效,因为我可以导入它们。 但是,当我转到www。[mysite] .com / test.cgi时,我仍然得到同样的错误。

    [编辑]

    我不确定问题

      

    connect()参数是否正确? MySQL是否在localhost上运行   在默认端口?

    我在我的服务器上运行MySQL。关于connect()参数的问题是否与此相关?

      

    SELECT语句是否正确?

    你是说我的SELECT语句之类的SQL语句是否正确? 我还没有使用任何SQL查询。 我在这需要吗?

4 个答案:

答案 0 :(得分:2)

通过在必要时插入换行符并用"'替换智能引号,我已经整理了一些代码。以下是否还有运气?您只需输入python test.cgi吗?

即可从终端运行它
#!/usr/bin/env python

import MySQLdb

print "Content-Type: text/html"
print
print "<html><head><title>Books</title></head>"
print "<body>"
print "<h1>Books</h1>"
print "<ul>"

connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db')
cursor = connection.cursor()
cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10")

for row in cursor.fetchall():
    print "<li>%s</li>" % row[0]

print "</ul>"
print "</body></html>"

connection.close()

答案 1 :(得分:2)

任何问题都可能导致您看到的错误:

  1. 服务器上是test.cgi可执行文件(chmod 755)吗?
  2. 您将test.cgi指定为ScriptAlias位置的目录或启用了ExecCGI选项的目录(或者如果您不使用Apache,则等效)?
  3. 系统python或网络服务器启动环境中的PATHPATH吗?
  4. 是否安装了MySQLdb Python库?
  5. connect()参数是否正确? MySQL是否在默认端口的localhost上运行?
  6. SELECT声明是否正确?
  7. 如果您确定找到了python(使用最简单的脚本进行测试,或者如果可以并且键入which python则登录Web服务器),那么您可以通过以下方式获得更好的调试输出将以下内容添加到shebang正下方的脚本顶部:

    import cgitb
    cgitb.enable()
    

    更多详情:http://docs.python.org/library/cgitb.html

    此外,如果您具有对Web服务器的shell访问权限,请尝试运行python并输入:

    >>> import MySQLdb
    

    如果命令返回时没有错误,则表示您已获得上述#4的答案。如果打印错误,则需要将MySQLdb安装到Web服务器的Python安装中。

    编辑:仔细查看问题的顶部,我看到代码是从Django Book开头的一个说明性示例中删除的。因此,我可能会扩展上面的#5以包含警告,当然,需要在Web服务器可用的MySQL安装上设置必需的数据库,表,用户和权限。

答案 2 :(得分:1)

http://dpaste.com/8866/中的错误正在发生,因为您使用的是“引号”而不是标准的ASCII引号。

您需要将“和”替换为“。只需在文本编辑器中使用查找和替换。

答案 3 :(得分:0)

确保使用正确的行结尾保存文件。即仅在unix上使用LF,或在Windows上使用CR / LF。我刚刚遇到了同样的问题......