在alwaysdata.com部署Django

Emr*_*rah 9 python django fastcgi

我是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() 
Run Code Online (Sandbox Code Playgroud)
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]
Run Code Online (Sandbox Code Playgroud)

Ken*_*yer 21

这是使用fastcgi设置Django 的alwaysdata wiki条目.唯一不足的是:它是用法语写的.

好吧,我不说法语,但基本上说的是:

  1. 创建一个public在django项目文件夹中命名的目录.
  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")
    
    Run Code Online (Sandbox Code Playgroud)
  3. 接下来,在public包含以下内容的文件夹中创建.htaccess :

    AddHandler fcgid-script .fcgi
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ django.fcgi/$1 [QSA,L]
    
    Run Code Online (Sandbox Code Playgroud)
  4. 如果您计划包含django管理界面,请在您的public目录中创建此符号链接:

    ln -s /usr/local/alwaysdata/python/django/1.1/django/contrib/admin/media/ media
    
    Run Code Online (Sandbox Code Playgroud)
  5. 最后,您的文件夹树层次结构应该看起来像这样:

    myproject/
        __init__.py
        manage.py
        public/
            django.fcgi
            .htaccess
            media/
        settings.py
        urls.py
        myapp/
            views.py
            models.py
    
    Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.我和管理员谈过,他说他很快会提供一个英文维基.让我们希望这很快就会发生.


更新:现在有一篇英文维基文章.

  • +1用于提供有关使用您不会说的语言编写的文档的系统的答案.也许应该有一个新的徽章,只是不知道它会被称为什么.多语种,非转译 - 野生驴猜测,hackage?不,太久了.:-) (5认同)
  • AlwaysData每天都在变得越来越国际化.我认为如果你准备好帮助英语维基百科,那将是非常高兴的(这是一个维基,所以你可以贡献).如果文档是法语,支持是世界级的:) (2认同)

Van*_*ale 6

您正在尝试混合两种不同的Web服务器集成方法:fcgi(fast cgi)和wsgi.

您的第一个片段是与Web服务器的wsgi接口,是将Django与Apache集成的推荐方法.官方Django文档中可以找到非常好的资源(包括示例)来帮助您正确设置它如何使用Django与Apache和mod_wsgi以及mod_wsgi docs 与Django集成

第二个片段(带有AddHandler行)用于fcgi.这种接口更常用于将Django与lighttpd和nginx Web服务器连接.用于设置fcgi接口的资源可以在官方Django文档中找到如何将Django与FastCGI,SCGI或AJP一起使用.

因为看起来像alwaysdata.com只使用FastCGI(fcgi)接口,所以你会遇到这种方法.看起来他们的维基页面上有一些例子Déployeruneapplication 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")
Run Code Online (Sandbox Code Playgroud)