在 Djano 中,为什么浏览时会出现 500 服务器错误,但来自 SSH 的“python mysite.fcgi”可以正常工作?

在 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"])

我正在 1and1 上进行设置。这很麻烦,但我认为我已经接近目标了。

答案1

对于 CGI,500 服务器错误通常是由于 CGI 在 HTML 代码之前输出了错误的标头数据而导致的。您应该在 html 开始之前输出内容类型和两个回车符“\n”。 任何意外的输出将导致 500 错误。

我不是 Python 爱好者所以这里有一个 Perl 示例。;-)

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

您可能可以在服务器日志中找到确切原因。看到 500 错误时,请务必先检查那里。

答案2

尝试:

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

然后对该文件夹执行 chmod 777。

如果您可以将其作为 ssh 运行,并且 apache 作为 www-data(或除您之外的某些 UID)运行,则它可能正在尝试写入 eggcache 并被拒绝权限。

答案3

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]

相关内容