Если я захожу на свой сайт, я получаю 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 и получает отказ в разрешении.