使用FCGI在Apache上运行Django

4
已解决:很遗憾我无法解决这个问题,但我重新开始并按照Django+FastCGI指南"A Small Orange" wiki上进行,现在一切都按预期工作。
我正在尝试在Apache上设置Django和FCGI。我使用的是A Small Orange的共享主机计划。
Django已安装、运行,并能够在运行syncdb命令时创建数据库表。如果我运行manage.py runserver,然后使用lynx导航到localhost:8080,Django将正确显示。然而,无法通过互联网查看Django,因为该页面显示500内部服务器错误。
我已安装flup python包,并使用python 2.6版本。
以下是我位于/public_html/中的.htaccess文件的内容:
RewriteEngine On
  RewriteBase /
  RewriteRule ^(media/.*)$ - [L]
  RewriteRule ^(admin_media/.*)$ - [L]
  RewriteRule ^(dispatch\.fcgi/.*)$ - [L]
  RewriteRule ^(.*)$ dispatch.fcgi/$1 [L]

以下是我dispatch.fcgi文件的内容,它也位于/public_html中:
#!/usr/local/lib/python2.6
import sys
import os
os.chdir('/home/thegamer/django/projects/thegamer')
sys.path += ['/home/thegamer/django/django']
sys.path += ['/home/thegamer/django/projects']
from fcgi import WSGIServer
from django.core.handlers.wsgi import WSGIHandler
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'thegamer.settings'
WSGIServer(WSGIHandler()).run()

错误日志显示了什么? - Cat Plus Plus
[2009年11月08日 11:52:42] [警告] FastCGI:(动态)服务器“/home/thegamer/public_html/dispatch.fcgi”在3次尝试中未能保持运行30秒,其重启间隔已延迟至600秒。 - Peter Horne
如果您尝试手动运行dispatch.fcgi会发生什么?如果它能正常工作,它应该只是等待请求。如果它终止了,那么很可能会有一条消息解释出了什么问题。 - Rasmus Kaj
它输出了预期的HTML代码。我已经解决了这个问题,但不幸的是我并不完全确定是什么导致了这个问题。我会尽力找出原因,并在找到后进行更新。感谢您的帮助。 - Peter Horne
3个回答

1

你在使用sqlite吗?如果是的话,你需要一个绝对路径来指定数据库文件,而不是相对路径。

如果这不是问题所在,请在你的设置中将DEBUG=True,让Django告诉你具体是什么问题。


我正在使用mysql,问题不在我的数据库上。问题出现在apache接收请求和传递给django处理之间的某个地方。在本地运行django没有问题,因此不会产生错误。但是在互联网上运行它会导致问题,我无法访问它以查看错误消息。 - Peter Horne
作为另一种选择,可以使用电子邮件通知来获取调试信息,请参考 https://dev59.com/UUrSa4cB1Zd3GeqPTA2j#1648578。 - luc
1
很可能是你运行管理命令和Apache运行服务器之间的环境差异导致的问题,而不是在到达Django之前出现的错误(或者如果错误发生在Django之前,那么Apache的默认错误日志中可能有一些有用的信息)。因此,请启用调试功能(或者在错误发生时发送电子邮件,但同时还需要确保服务器的邮件能够真正地发送给你),并检查错误消息。 - Rasmus Kaj
(忽略之前的消息,我没有看到你引用了实际的错误信息) - Rasmus Kaj

1

1

我之前也遇到了这个问题。花了一些时间,但最终在 A Small Orange 的非常热心的支持人员的帮助下解决了。

你需要确保你的dispatch.fcgi文件的 chmod 属性是 755。其他任何属性(我的是775)都会导致出现此错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接