Python Django和FastCGI在浏览器中提供404,但在命令行上工作 总结
Django 1.6 Python 2.6 Apache 2.2.27 PostgreSQL 8.4.20 psycopg2 flup 通过命令行查看Django站点的FastCGI包装页似乎效果不错,但在通过浏览器查看我的站点时,我总是得到一个Python Django和FastCGI在浏览器中提供404,但在命令行上工作 总结,python,django,apache,.htaccess,fastcgi,Python,Django,Apache,.htaccess,Fastcgi,Django 1.6 Python 2.6 Apache 2.2.27 PostgreSQL 8.4.20 psycopg2 flup 通过命令行查看Django站点的FastCGI包装页似乎效果不错,但在通过浏览器查看我的站点时,我总是得到一个404:page Not Found。我做错了什么?我怀疑这与我的Apache设置有关 版本和设置 Django 1.8文档中说,从Django 1.7开始,fastcgi支持已被弃用,我不能使用mod_wsgi,所以我使用的是Django 1.6。Py
404:page Not Found
。我做错了什么?我怀疑这与我的Apache设置有关
版本和设置
Django 1.8文档中说,从Django 1.7开始,fastcgi支持已被弃用,我不能使用mod_wsgi
,所以我使用的是Django 1.6。Python2.7和更高版本不可用,因此我使用Python2.6。托管公司不会为我安装Python软件包,但我自己设法安装了flup和psycopg2。(请注意,我必须在Linux64机器上编译psycopg2并将其上载到服务器。)
Django、flup和psycopg2安装在/home/account/public\u html/sitename/site packages/
中。我的Django站点位于/home/account/public\u html/sitename/sitename/
中。在命令提示符下发出set | grep-epython-edjango
,不会返回任何结果(即未设置PYTHON或DJANGO环境变量)
全部故事
我正在尝试在共享主机上设置Django。在任何人提出之前:不幸的是,mod_wsgi
是不可能的
我按照这里的说明做了:最后得到了这个/home/account/public\u html/.htaccess
:
AddHandler fastcgi-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ sitename/site.fcgi/$1 [QSA,L]
这是/home/account/public\u html/sitename/site.fcgi
:
#!/usr/bin/python
import sys, os
# Add a custom Python path.
sys.path.insert(0, "/home/account/public_html/sitename")
sys.path.insert(0, "/home/account/public_html/sitename/site-packages")
# Switch to the directory of your project. (Optional.)
os.chdir("/home/account/public_html/sitename")
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "sitename.settings"
# From Django
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="prefork", daemonize="false", debug="true")
当我做cd/home/account/public_html/sitename//site.fcgi
,我得到:
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: 200 OK
X-Frame-Options: SAMEORIGIN
Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html>
<head>
...etc...
导航到http://example.com/valid-page
还生成一个404
,服务器错误:
[error] File does not exist: /home/account/public_html/sitename/site.fcgi/valid-page
我做错了什么?或者WSGI是如何工作的,这样我可以更好地调试它
我试过了
site.fcgi
,方法是:
# From Django
#from django.core.servers.fastcgi import runfastcgi
#runfastcgi(method="prefork", daemonize="false", debug="true")
# From HostGator
from flup.server.fcgi import WSGIServer
from django.core.wsgi import get_wsgi_application
WSGIServer(get_wsgi_application()).run()
相同的结果:404
。这是有意义的,因为手动遍历代码表明来自Django的代码只是来自HostGator的代码的包装
.htaccess
中的fcgid脚本
处理程序,而不是fastcgi脚本
:
#AddHandler fastcgi-script .fcgi
AddHandler fcgid-script .fcgi
.htaccess
中的RewriteCond
:
#RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(sitename/site.fcgi)
RewriteRule ^(.*)$ sitename/site.fcgi/$1 [QSA,L]
/
):
请求URI
环境变量:
SetEnv REQUEST_URI %{REQUEST_URI}
site.fcgi
制作成一个CGI脚本,只是为了看看我是否能够从命令提示符下重现运行site.fcgi
的成功(可能不是一个永久解决方案):
然后导航到http://example.com/sitename/site.fcgi
404:Page Not Found
,一些人返回了更明显的错误,而另一些人只是显示了site.fcgi
的源代码
编辑
mod_wsgi
提前感谢您的帮助或建议 我遇到了同样的问题(已发布),最终确定这是由于我与bluehost订阅的共享主机帐户受到限制所致。我切换了一个dreamhost共享托管计划,很快就启动并运行了。我遇到了相同的问题(已发布),并最终确定这是由于我与bluehost订阅的共享托管帐户受到限制所致。我切换了一个dreamhost共享托管计划,很快就启动并运行了。很难模仿,你能保密ssh访问吗?至少您使用的是什么共享主机?很难模拟,您可以私自使用ssh访问吗?至少你使用什么共享主机?
#RewriteRule ^(.*)$ sitename/site.fcgi/$1 [QSA,L]
RewriteRule ^(.*)$ sitename/site.fcgi $1 [QSA,L]
SetEnv REQUEST_URI %{REQUEST_URI}
#AddHandler fastcgi-script .fcgi
#RewriteEngine On
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^(.*)$ sitename/site.fcgi/$1 [QSA,L]
Options -Indexes +ExecCGI
AddHandler cgi-script .fcgi