【问题标题】:500 internal server error when importing a python module in wsgi在 wsgi 中导入 python 模块时出现 500 内部服务器错误
【发布时间】:2011-07-14 03:37:34
【问题描述】:

我有一个 Python 脚本,它使用 PEST wsgi 库异步执行函数。但是,当我尝试导入另一个模块时,它只会导致 500 错误。

我尝试引用它的方式是:

from foo import * 
from foo import Foo

其中 foo 是一个 .py 文件,其中有我想要引用的对象。

试图通过 Chrome 的 Inspect Element Control 监控调用,但找不到任何东西。

还尝试使用 Apache 的错误日志进行调试,但那里什么也没有。
任何提示表示赞赏。

更新: 我尝试了以下导致相同的 500 错误:

--利用

import site 

site.addsitedir("path/to/my/py/files/folder")

--通过插入以下内容来修改 Apache2 httpd.conf 文件:

WSGIPythonPath /path/to/my/py/files/folder

--修改/etc/apache2/sites-available/myapp.conf中的应用程序配置文件,插入上面的WSGIPythonPath

【问题讨论】:

    标签: python apache2 cgi mod-wsgi wsgi


    【解决方案1】:

    Apache 的 500 错误只是告诉您 Python 脚本正在返回错误。我的猜测是在 Apache 环境中,Python 找不到那个模块。尝试一个简单的脚本,打印 sys.path 并确保其中包含您期望的目录。

    【讨论】:

    • 这样做并找到了我从中导入模块的文件夹,但这与我执行脚本的文件夹相同。我还在应用程序 conf 和 A​​pache 的 httpd.conf 中添加了一个 WSGIPythonPath - 结果保持不变。
    【解决方案2】:

    添加

    WSGIPythonPath /path/to/my/py/files/folder
    

    在应用程序配置文件中的任何其他别名或目录之前确实会有所作为。 问题解决了!

    【讨论】:

    • 抱歉打扰了,您到底在哪里添加了这一行?发送
    【解决方案3】:

    也许你应该对 cgi 脚本使用这种模式来获取 html 表单的错误:

    import cgi
    import cgitb; cgitb.enable()  # for troubleshooting
    import traceback
    # code here
    except:
        tb = traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback)
        tb = ''.join(tb)
        print '<pre>%s</pre></body></html>' % tb
    

    【讨论】:

    • 他们没有使用基于被标记为 mod-wsgi 的 CGI。
    【解决方案4】:

    如果异常传播回 mod_wsgi,则应将详细信息记录到适当的 Apache 错误日志中。如果不是,则可能是您使用的 WSGI 框架/工具包正在捕获异常并返回通用 HTTP 500 响应页面。如果是这种情况,您可能需要在正在使用的 WSGI 框架/工具包中启用调试选项。

    或者,问题不在于 WSGI 脚本文件/应用程序,而在于 Apache 配置,在这种情况下,您不会寻找 Python 异常/回溯。因此,您需要更仔细地查看 Apache 错误日志文件,并查找任何错误并提供它所说的内容。

    【讨论】:

    • 我也检查并遵循了您在此处给出的答案:*.com/q/2917972/228137,但遗憾的是没有任何改进。
    • 按照“code.google.com/p/modwsgi/wiki/…”中的说明使用打印语句检测您的代码,并验证日志记录是否正常工作以及脚本中的进展情况。还将 'LogLevel' 指令设置为 'info' 并查看 Apache 错误日志以验证是否加载了 WSGI 脚本文件。