我是django的新手。我尝试了这个,但我无法部署。我该怎么办
#!/usr/bin/python
import sys
import os
base = os.path.dirname(os.path.abspath(__file__)) + '/..'
sys.path.append(base)
os.environ['DJANGO_SETTINGS_MODULE'] = 'myfirstapp.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
AddHandler fcgid-script .fcgi
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(adminmedia/.*)$ - [L]
RewriteCond %{REQUEST_URI} !(cgi-bin/myproject.fcgi)
RewriteRule ^(.*)$ mysite.fcgi/$1 [L]
答案 0 :(得分:21)
这是使用fastcgi设置Django的alwaysdata wiki entry。只有不足:用法语写的。
好吧,我不说法语,但基本上说的是:
public
的目录。在该目录中使用以下内容创建文件django.fcgi
:
#!/usr/bin/python
import os, sys
_PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, _PROJECT_DIR)
sys.path.insert(0, os.path.dirname(_PROJECT_DIR))
_PROJECT_NAME = _PROJECT_DIR.split('/')[-1]
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % _PROJECT_NAME
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
接下来,在public
文件夹中创建一个.htaccess,其中包含以下内容:
AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ django.fcgi/$1 [QSA,L]
如果您打算包含django管理界面,请在public
目录中创建此符号链接:
ln -s /usr/local/alwaysdata/python/django/1.1/django/contrib/admin/media/ media
最后,您的文件夹树层次结构应该如下所示:
myproject/
__init__.py
manage.py
public/
django.fcgi
.htaccess
media/
settings.py
urls.py
myapp/
views.py
models.py
希望这会有所帮助。我和管理员谈过,他说他很快会提供一个英文维基。我们希望这很快就会发生。
答案 1 :(得分:6)
您正在尝试混合使用两种不同的Web服务器集成方法:fcgi(fast cgi)和wsgi。
您的第一个代码段是与Web服务器的wsgi接口,是将Django与Apache集成的推荐方法。可以在官方Django文档How to use Django with Apache and mod_wsgi和mod_wsgi文档Integration with Django
中找到帮助您正确设置的非常好的资源(包括示例)第二个片段(带有AddHandler行)用于fcgi。这种接口更常用于将Django与lighttpd和nginx Web服务器连接。用于设置fcgi接口的资源可以在Django官方文档How to use Django with FastCGI, SCGI, or AJP中找到。
由于 alwaysdata.com 看起来只使用FastCGI(fcgi)接口,因此您会遇到此方法。看起来他们的wiki页面上有一些例子Déployer une application Django,特别是你需要用这个代替你的第一个(wsgi)代码片段:
#!/usr/bin/python
import os, sys
_PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, _PROJECT_DIR)
sys.path.insert(0, os.path.dirname(_PROJECT_DIR))
_PROJECT_NAME = _PROJECT_DIR.split('/')[-1]
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % _PROJECT_NAME
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
答案 2 :(得分:2)
我们现在(自几个月以来)获得了一篇英文文章: Django on alwaysdata.com
此致