2013-08-22 43 views
0

我是django的neewbie,而且我试图在服务器(共享的Dreamhost服务器)上部署我的项目。我跟着我找到的教程,但它不起作用。我的项目结构是:正在部署Django - 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,但我有一个简单的“你好世界”以尝试,但它不是显示。当我访问我的域名时,我只有一个HTTP 404 ...

编辑 我已经安装了Python 2.7和Django 1.5。现在我得到一个500内部服务器错误。

回答

1

这是我如何做到这一点,在Django 1.5,在DreamHost的:

  • 致力于自己的项目中的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_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', '[email protected]'),) 
MANAGERS = ADMINS 
DATABASES = {} # Appropriately for your production environment 
SECRET_KEY = "..." # Your secret key 
ALLOWED_HOSTS = ["myproject.com", "www.myproject.com"] 

F或者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,你不要当你与pip安装软件包需要--user标志了。当virtualenv处于活动状态时,所有包都安装在该virtualenv中。

关于requirements.txt

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

请注意,virtualenv是没有必要的,但建议。您可以在passenger_wsgi.py/usr/bin/python之间设置INTERPvirtualenv对于在同一个帐户上拥有多个具有不同依赖关系的Django站点很有用。当您想为您的站点升级Django时,它也很有用,因此您可以在beta.myproject.com上测试升级,而不会中断主站点上的流量。

最后,如果您使用的是共享主机,DreamHost支持会鼓励为每个网站使用不同的用户帐户,但我不知道这会产生多大的差异。要小心繁重的操作,例如大数据导入,因为如果进程使用大量内存,它可能会被DreamHost杀死。内存上限未指定,但相当低。因此,如果您的网站需要执行一些繁重的操作,则需要对这些操作进行容错,以便在杀死后恢复。

+0

谢谢你的回答!我会尝试这些步骤!现在我得到的是一个500错误。 我已经在我的服务器 – lorenag83

+0

中安装了Python 2.7和Django 1.5,但仍无法使其工作......请问您是如何设置virtualenv的?谢谢! – lorenag83

+0

@ lorenag83我添加了virtualenv的设置步骤。 – janos