在alwaysdata.com部署Django

9 投票
3 回答
7817 浏览
提问于 2025-04-15 17:19

我刚开始学习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]

3 个回答

2

我们现在有一篇英文文章,已经有几个月了: Django在alwaysdata.com上的介绍

祝好,

6

你正在尝试混合两种不同的网页服务器集成方法:fcgi(快速cgi)和wsgi。

你提供的第一个代码片段是用于wsgi接口的,这种方法是将Django与Apache集成的推荐方式。你可以在官方Django文档中找到很多很好的资源(包括示例),帮助你正确设置这一切,链接在这里:如何将Django与Apache和mod_wsgi一起使用,还有mod_wsgi的文档:与Django的集成

第二个代码片段(包含AddHandler行)是用于fcgi的。这种接口通常用于将Django与lighttpd和nginx网页服务器连接起来。关于如何设置fcgi接口的资源可以在官方Django文档中找到,链接在这里:如何将Django与FastCGI、SCGI或AJP一起使用

看起来alwaysdata.com只使用FastCGI(fcgi)接口,所以你只能使用这种方法。它们的维基页面上似乎有一些示例,链接在这里:部署一个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")
21

这里有一个alwaysdata的维基页面,讲的是如何用fastcgi来设置Django。不过唯一的问题是:它是用法语写的。

我虽然不懂法语,但大概意思是:

  1. 在你的Django项目文件夹里,创建一个叫做public的文件夹。
  2. 在这个文件夹里,创建一个名为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")
    
  3. 接下来,在public文件夹里创建一个名为.htaccess的文件,内容如下:

    AddHandler fcgid-script .fcgi
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ django.fcgi/$1 [QSA,L]
    
  4. 如果你打算使用Django的管理界面,记得在public文件夹里创建一个符号链接:

    ln -s /usr/local/alwaysdata/python/django/1.1/django/contrib/admin/media/ media
    
  5. 最后,你的文件夹结构应该大致是这样的:

    myproject/
        __init__.py
        manage.py
        public/
            django.fcgi
            .htaccess
            media/
        settings.py
        urls.py
        myapp/
            views.py
            models.py
    

希望这些信息对你有帮助。我和管理员聊过,他说很快会提供一个英文的维基页面。希望这能尽快实现。


更新:现在有一个英文维基文章了。

撰写回答