Назад | Перейти на главную страницу

Почему в Django я получаю ошибку сервера 500 при просмотре, но «python mysite.fcgi» из SSH работает нормально?

Если я захожу на свой сайт, я получаю 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 часто вызвана неправильными данными заголовка, выводимыми вашим CGI до HTML-кода. Вы должны вывести тип содержимого и ДВА символа возврата каретки "\ n" до начала html. любой неожиданный вывод вызовет ошибку 500.

Я не любитель Python, поэтому вот пример Perl. ;-)

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

Вы можете найти точную причину в журналах вашего сервера. Всегда проверяйте это сначала, когда видите 500 ошибок.

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]

Пытаться:

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

И затем chmod 777 эту папку.

Если вы можете запустить его как ssh, а apache работает как www-data (или какой-либо UID, отличный от вашего), возможно, он пытается записать в eggcache и получает отказ в разрешении.