gpt4 book ai didi

python - Django lighttpd FCGI 错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:01:20 26 4
gpt4 key购买 nike

我正在尝试通过 lighttpd + fcgi 部署我的 django 应用程序,但是当我运行 fcgi 脚本时,它给我一个错误

这是 fcgi 脚本本身:

#!/usr/bin/python2.6
import sys, os

# Add a custom Python path.
sys.path.insert(0, "/home/wite")

# Switch to the directory of your project. (Optional.)
os.chdir("/home/wite/dormcode")

# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "dormcode.settings"

from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")

当使用 python 运行 fcgi 脚本时,我得到一个 302 FOUND。当我尝试通过 Web 浏览器访问该页面时,我什么也得不到。

WSGIServer: missing FastCGI param REQUEST_METHOD required by WSGI!
WSGIServer: missing FastCGI param SERVER_NAME required by WSGI!
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!
Status: 302 FOUND
Vary: Cookie
Content-Type: text/html; charset=utf-8
Location: http://localhost/login/
Set-Cookie: csrftoken=30f07d4a59820a5ab7b502447cc16f5a; Max-Age=31449600; Path=/

*编辑 *

在试用了一些 lighttpd 配置选项之后,我设法得到了一些不同的东西。当我通过 Web 浏览器访问该应用程序时,该页面会挂起一段时间并出现 500 错误,并将其留在日志中:

2011-02-12 01:04:59: (mod_fastcgi.c.2582) unexpected end-of-file (perhaps the fastcgi process died): pid: 0 socket: tcp:127.0.0.1:80 
2011-02-12 01:04:59: (mod_fastcgi.c.3367) response not received, request sent: 1076 on socket: tcp:127.0.0.1:80 for /dormcode.fcgi?, closing connection

最佳答案

这不仅仅是表面上看到的。

payne 是正确的,因为这个 fastcgi 监听器使用 stdin 作为其通信套接字。

但是,这只是运行 FastCGI 响应程序的一种方法。事实上,这是为 lighttpd 运行响应程序的错误方式,因为 lighttpd 不支持通过标准输入与其响应程序对话。

关键在于这一行:

runfastcgi(method="threaded", daemonize="false")

这是 apache 的正确行,但不是 lighttpd 的正确行。对于 lighttpd,您需要这样的东西:

runfastcgi(method="prefork", daemonize="true", host="127.0.0.1", port="3033")

这将做的是在您选择的主机/端口上运行 fastcgi 进程,作为将 fork 到后台的守护进程。设置 daemonize="false"进行调试,或者如果使用类似 supervisord 的东西,但大多数人通常需要一个守护进程。

需要注意的是,如果你的脚本和刚才粘贴的一样简单,则不需要整个脚本。您可以改为通过 manage.py 运行 fastCGI 响应程序:

./manage.py runfcgi method=prefork host=127.0.0.1 port=3033 pidfile=/path/to/foo.pid

现在您已经(希望)让您的 FastCGI 响应程序运行,您想要在您的 lighttpd 配置中执行此操作:

"/mysite.fcgi" => (
"main" => (
"host" => "127.0.0.1",
"port" => 3033,
"check-local" => "disable",
)
),

也就是说,无论您为 fastcgi 响应器选择什么端口,都需要将 lighttpd 指向那里。

应该注意的是,所有这些都可以在 Django FastCGI documentation 中找到。但是由于开源项目中频繁的编辑和一些功能的增加,该文档已经失去了很多清晰度。

关于python - Django lighttpd FCGI 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4973723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com