我是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内部服务器错误。
答案 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.py
,beta_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
不是必需的,但建议使用。您可以在INTERP
至passenger_wsgi.py
中设置/usr/bin/python
。 virtualenv
对于在同一帐户上拥有多个具有不同依赖关系的Django站点非常有用。当您想要为您的站点升级Django时,它也很有用,这样您就可以在beta.myproject.com
上测试升级,而不会中断主站点上的流量。
最后,如果您使用共享主机,DreamHost支持鼓励为每个网站使用不同的用户帐户,但我不知道它有什么不同。请注意繁重的操作,例如大数据导入,因为如果进程使用大量内存,它可能被DreamHost杀死。内存上限未指定,但它很低。因此,如果您的站点需要执行一些繁重的操作,则需要使此类操作具有容错能力,以便在被杀后恢复。