在共享主机(1and1)上部署Django时出现500错误
我在Django上开发了一个项目,运行起来很顺利,使用的命令是:
python manage.py runserver
虽然用python manage.py runfcgi
这个命令可以显示我网站的HTML代码,但我在通过创建的子域名访问网站时遇到了一些问题。
场景是这样的:在我的1and1服务器上,正确安装了Django和flup(可以用python -c "import django"
来确认),我的主文件夹结构如下:
/bla/bla/bla/test_django
|-> manage.py
|-> test_django
| |-> __init__.py
| |-> settings.py
| |-> urls.py
| |-> wsgi.py
|-> dispatch.fcgi
|-> .htaccess
我原本以为.htaccess
文件应该放在“根”文件夹里,但我也把它复制到了test_django
文件夹里。文件内容如下:
AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi/$1 [QSA,L]
我的dispatch.fcgi
文件内容(已经设置为755权限)如下:
import sys
import os
sys.path.insert(0, '~/.local/lib/python2.6/site-packages')
os.environ['DJANGO_SETTINGS_MODULE'] = 'test_django.settings'
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
其中sys.path.insert
这一行是本地安装的Python版本(不确定是否正确链接)。不过,我不太明白这个是用来干嘛的。总之,之前提到的,无论是用python manage.py runfcgi
还是./dispatch.fcgi
,输出的都是网站的HTML。
我现在的问题是:除了把我的子域名test.whateverdomain.com指向我的/bla/bla/bla/test_django
文件夹之外,还需要做其他的事情吗?这样做会出现500错误。我担心我可能漏掉了一个重要的点,那就是如何将用户重定向到可以加载内容的可执行文件。
2 个回答
确保你修改系统路径的调用是正确的,这样才能让必要的Python包可以被访问到,这一点非常重要。
你在FCGI文件中的那些行应该看起来像这样:
sys.path.insert(0, "/home#/username/local_usr/lib/python2.7/site-packages")
sys.path.append("/home#/username/django_projects/mynewsite")
第一行是你的Python环境,第二行是你的Django项目。我建议使用virtualenv,这样的话(将你的Python环境放在名为'.env'的文件夹中,virtualenv命名为'env'),你的整个FCGI文件应该像这样:
#!/home#/username/.env/env/bin/python
import sys
import os
sys.path.insert(0, "/home#/username/.env/env/lib/python2.7/site-packages")
sys.path.append("/home#/username/django_projects/test_django")
os.environ['DJANGO_SETTINGS_MODULE'] = 'test_django.settings'
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
注意:第一行不是注释。
来源
http://www.binaryadventure.com/2013/10/23/django-on-bluehost-in-five-minutes/ https://help.asmallorange.com/index.php?/Knowledgebase/Article/View/305/0/installing-django-using-virtualenv
你应该把你的 .fcgi 文件放在一个叫做 cgi-bin
的文件夹里。想要更多的说明,可以看看这个链接:在 1and1 的 Linux 共享主机上安装 Django 应用。