在Djano中,为什么浏览时得到一个500服务器错误,但从SSH的“python mysite.fcgi”工作正常?

如果我浏览到我的网站,我得到一个500“内部服务器错误”。 但是,如果我SSH到我的服务器,并进入我的网站的文件夹,并运行“python mysite.fcgi”,我看到HTML呈现良好。 显然,有些事情是错的,但我不知道是什么。

这是我的.htaccess文件:

AddHandler fastcgi-script .fcgi RewriteEngine On RewriteRule ^(media/.*)$ - [L] RewriteRule ^(static/.*)$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ mysite.fcgi/$1 [QSA,L] 

这是我的mysite.fcgi文件:

 #!/usr/bin/python2.5 import sys, os sys.path.insert(0, "/kunden/homepages/34/[mydir]/htdocs/projects/django") sys.path.insert(1, "/kunden/homepages/34/[mydir]/lib/python/site-packages") os.chdir("/kunden/homepages/34/[mydir]/htdocs/projects/django/mysite") os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' from django.core.servers.fastcgi import runfastcgi runfastcgi(["method=threaded", "daemonize=false"]) 

我正在设置1和1。 这是一个痛苦,但我认为我很接近。

使用CGI时,500错误通常是由错误的标题数据在HTML代码之前由CGI输出的。 您应该在html开始之前输出内容types和TWO回车符“\ n”。 任何意外的输出将导致500错误。

我不是一个Python家伙,所以这里是一个Perl的例子。 😉

 #!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello, World."; 

您可能能够find您的服务器日志中的确切原因。 当你看到500个错误时,总是先查看那里。

尝试:

 os.environ['PYTHON_EGG_CACHE'] = '/path/to/writeable/folder' 

然后chmod 777那个文件夹。

如果你可以像ssh那样运行它,并且apache运行的是www-data(或者你的一些UID),那么它可能会试图写入eggcache并获得权限被拒绝。

 AddHandler fastcgi-script .fcgi <IfModule mod_fcgid.c> AddHandler fcgid-script .fcgi <Files ~ (\.fcgi)> SetHandler fcgid-script Options +FollowSymLinks +ExecCGI </Files> </IfModule> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /mysite.fcgi/$1 [QSA,L]