【问题标题】:Deploying Django at alwaysdata.com在 alwaysdata.com 部署 Django
【发布时间】:2010-12-29 15:17:52
【问题描述】:

我是 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]

【问题讨论】:

  • 你有错误吗?您在第 5 行缺少 +,您的意思是“../”而不是“/..”?

标签: python django fastcgi


【解决方案1】:

这是使用 fastcgi 设置 Django 的 alwaysdata wiki entry。唯一的缺点:它是用法语写的。

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

  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
    

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


更新:有一个English wiki article now.

【讨论】:

  • +1 用于提供有关系统的答案,其中包含以您不会说的语言编写的文档。也许应该有一个新的徽章,只是不确定它会被称为什么。多语言非翻译狂野的猜测黑客?唔,太长了。 :-)
  • AlwaysData 每天都变得越来越国际化。我认为如果您准备好为英语 Wiki 提供帮助,他们会非常高兴(这是一个 wiki,因此您可以做出贡献)。如果文档是法文的,那么支持是世界级的 :)
  • 这仍然不适合我。当我访问我的网站时,我只会得到 Always Data 默认网页 (~/www/index.html)。服务器如何知道运行 Django/Python 脚本?
【解决方案2】:

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

您的第一个 sn-p 用于与 Web 服务器的 wsgi 接口,并且是将 Django 与 Apache 集成的推荐方法。可以在官方 Django 文档How to use Django with Apache and mod_wsgi 和 mod_wsgi 文档Integration with Django 中找到非常好的资源(包括示例)来帮助您正确设置它

第二个 sn-p(带有 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) sn-p 替换为:

#!/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】:

    我们现在(几个月以来)得到了一篇英文文章: Django on alwaysdata.com

    问候,

    【讨论】:

      猜你喜欢
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 2013-07-04
      • 2017-06-24
      • 2016-02-26
      • 2011-06-15
      相关资源
      最近更新 更多