带有fastcgi的Django 2.0.7在浏览器中提供404,但可在命令行上使用

时间:2018-11-26 02:46:11

标签: python django fastcgi

我正在尝试在bluehost共享服务器上建立一个小型django项目,但在我认为应该是最后一步的问题上却遇到了麻烦-使它与fastcgi一起运行。

我使用miniconda安装了python 3.7.0和django 2.0.7,并能够创建一个项目/应用程序,但是我无法在浏览器中显示它(FWIW,我已经在另一个Bluehost网站上成功完成了此操作一项类似的计划,尽管该网站属于“共享加号”计划,而该网站只是基本计划,但我不知道这是否是问题所在

在我的〜/ public_html / myproject / .htaccess文件中:

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

在myproject.fcgi中,我有:

#!/home/username/miniconda3/bin/python
# -*- coding: utf-8 -*-
import sys, os
project_name = "myproject"

sys.stdout=open('/home/username/public_html/myproject/test.out','w')
print(project_name)

# Add a custom Python path.
sys.path.insert(0, "/home/username/miniconda3/bin/python")
sys.path.insert(0, "/home/username/public_html/myproject")
sys.path.insert(0, os.getcwd() + "/" + project_name)

os.environ['DJANGO_SETTINGS_MODULE'] = project_name + '.settings'

from django_fastcgi.servers.fastcgi import runfastcgi
from django.core.servers.basehttp import get_internal_wsgi_application

wsgi_application = get_internal_wsgi_application()
runfastcgi(wsgi_application, method="prefork", daemonize="false", minspare=1, maxspare=1, maxchildren=1)

此配置在另一个站点上对我有用,但是在这里我只能在命令行上成功运行./myproject.fcgi,但是在浏览器中却得到了404。

我无法访问服务器日志,因此我在fcgi脚本中添加了一行以将stdout定向到文件,并发现该文件未生成,因此我不确定访问python安装是否有问题当我尝试在浏览器中加载页面时,还是什么(我对此很陌生!)

我实际上在这里找到了我的确切问题,不幸的是没有答案: Django with FastCGI gives 404 in browser but works on command line

谢谢!

1 个答案:

答案 0 :(得分:0)

更新:我最终确定我面临的问题是由于共享托管环境的限制。对于初学者来说,如果没有root访问权限或对apache错误日志的访问,安装和故障排除将很困难,但是我能够使安装正常进行,并且当我意识到bluehost计划要求cgi脚本要从{{1}运行时,就取得了额外的进展。 } dir(而不是像大多数教程所建议的那样在cgi-bin中添加处理程序)。

但是,我无法克服的最后一个障碍似乎是对产生的线程数的限制-当我尝试在浏览器中加载网站(django测试页)时,它会挂起,并且我会我的shell会话中发生错误:.htaccess,如here所述。 ……可能有更多经验的人可以解决这个问题,但我最终决定切换起来会更容易。由于我已经成功地在另一个bluehost共享服务器帐户上完成了完全相同的操作,所以我花了比原本应该花费的时间更长的时间,但是我终于了解到bluehost已更新了他们的计划,而另一个仅在使用较旧的主机时才起作用计划的版本。

我切换到dreamhost(及其共享的服务器计划),并且能够轻松地运行所有内容!