部署Django - Dreamhost

时间:2013-08-22 21:14:57

标签: django http-status-code-404 dreamhost

我是django的neewbie,我试图在服务器上部署我的项目(共享的Dreamhost服务器)。我已经按照我发现的教程进行了操作,但它不起作用。我的项目结构是:

/usr/mydomain.com
    - public
        * media
        * static
    - project
        * __init__.py
        * manage.py
        * settings.py
        * urls.py
        * views.py
    - tmp
    - django-setup.py
    - manage.py
    - passenger_wsgi.py
    - passenger_wsgi.pyc

它仅适用于我的domain.com/admin,但我有一个简单的' hello world '视图可供试用,但它没有显示。当我访问我的域时,我只得到一个HTTP 404 ...

EDIT 我已经安装了Python 2.7和Django 1.5。现在我收到500内部服务器错误。

1 个答案:

答案 0 :(得分:1)

这就是我在DreamHost上使用Django 1.5的方式:

  • 致力于我的项目的virtualenv在~/virtualenv/myproject

  • 我的Django项目位于~/projects/myproject,设置为:

    • 数据库文件位于项目根目录中,名为sqlite3.db
    • STATIC_ROOT设置为os.path.join(os.path.abspath(os.path.dirname(__file__)), '..', 'static'),即项目根目录中的static目录。
    • 在项目中更新静态文件时,我必须运行python manage.py collectstatic
    • 我在~/projects/myproject/myproject中设置了每个环境设置,名为prod_settings.pybeta_settings.py,依此类推。
  • 我的网站位于~/sites/www.myproject.com,内部布局为:

    • myproject - Django项目的符号链接
    • sqlite3.db - Django项目中数据库文件的符号链接
    • public/static - Django项目中定义的STATIC_ROOT的符号链接
    • tmp/restart.txt - touch此文件让Passenger重新加载网站设置
    • passenger_wsgi.py - 乘客配置

像这样创建passenger_wsgi.py

projectname = 'myproject'
virtualenv_root = '/home/jack/virtualenv/' + projectname

import sys
import os

INTERP = os.path.join(virtualenv_root, 'bin', 'python')
if sys.executable != INTERP:
    os.execl(INTERP, INTERP, *sys.argv)

sys.path.append(os.path.join(os.getcwd(), projectname))
os.environ['DJANGO_SETTINGS_MODULE'] = projectname + '.prod_settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

像这样创建prod_settings.py

from myproject.settings import *

DEBUG = False
TEMPLATE_DEBUG = DEBUG

ADMINS = (('My Project', 'info@myproject.com'), )
MANAGERS = ADMINS
DATABASES = {}  # Appropriately for your production environment
SECRET_KEY = "..."  # Your secret key
ALLOWED_HOSTS = ["myproject.com", "www.myproject.com"]

对于Django 1.4或更早版本,您需要进行一些小修改,但同样的想法也适用。自Django 1.2以来,我一直在使用这种设置的变体。

我像这样设置virtualenv

# install pip and virtualenv in my home directory
easy_install --user pip
pip install --user virtualenv

# create a virtualenv dedicated to my django project
mkdir ~/virtualenv
virtualenv --distribute ~/virtualenv/myproject

# activate the virtualenv, install django and all project dependencies
. ~/virtualenv/myproject/bin/activate
cd ~/projects/myproject
pip install -r requirements.txt

请注意,激活virtualenv后,当您使用--user安装软件包时,不再需要pip标志。当virtualenv处于活动状态时,所有程序包都安装在virtualenv中。

关于requirements.txt

  • 在您的开发中创建它:pip freeze > requirements.txt
  • 编辑它,只留下项目真正需要的软件包。最好删除太多,然后根据需要添加回来。

请注意,virtualenv不是必需的,但建议使用。您可以在INTERPpassenger_wsgi.py中设置/usr/bin/pythonvirtualenv对于在同一帐户上拥有多个具有不同依赖关系的Django站点非常有用。当您想要为您的站点升级Django时,它也很有用,这样您就可以在beta.myproject.com上测试升级,而不会中断主站点上的流量。

最后,如果您使用共享主机,DreamHost支持鼓励为每个网站使用不同的用户帐户,但我不知道它有什么不同。请注意繁重的操作,例如大数据导入,因为如果进程使用大量内存,它可能被DreamHost杀死。内存上限未指定,但它很低。因此,如果您的站点需要执行一些繁重的操作,则需要使此类操作具有容错能力,以便在被杀后恢复。