首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部署Django - Dreamhost

部署Django - Dreamhost
EN

Stack Overflow用户
提问于 2013-08-22 21:14:56
回答 1查看 731关注 0票数 0

我对django非常满意,我只能尝试在服务器上部署我的项目(一个共享的Dreamhost服务器)。我已经遵循了我找到的教程,但它不起作用。我的项目结构是:

代码语言:javascript
复制
/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 ..。

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

EN

回答 1

Stack Overflow用户

发布于 2013-08-22 21:54:51

在DreamHost上使用Django 1.5,我就是这样做的:

  • 专门用于我的项目的virtualenv在~/virtualenv/myproject
  • 我的Django项目在~/projects/myproject中,安装程序如下:

代码语言:javascript
复制
- The database file is in the project root, named `sqlite3.db`
- `STATIC_ROOT` is set to `os.path.join(os.path.abspath(os.path.dirname(__file__)), '..', 'static')`, that is, the `static` directory in the project root.
- When the static files are updated in the project, I have to run `python manage.py collectstatic`
- I have per-environment settings in `~/projects/myproject/myproject`, named `prod_settings.py`, `beta_settings.py`, and so on.

  • 我的网站在~/sites/www.myproject.com中,布局在:

代码语言:javascript
复制
- `myproject` -- symlink to the Django project
- `sqlite3.db` -- symlink to the database file in the Django project
- `public/static` -- symlink to the `STATIC_ROOT` defined in the Django project
- `tmp/restart.txt` -- `touch` this file to have Passenger reload the site settings
- `passenger_wsgi.py` -- the Passenger configuration

创建这样的passenger_wsgi.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
# 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不是必需的,但建议使用。您可以不通过在INTERP中将passenger_wsgi.py中的/usr/bin/python设置为/usr/bin/python来进行操作。virtualenv对于在同一个帐户上有不同依赖项的多个Django站点非常有用。当您想升级站点的Django时,它也很有用,这样您就可以在beta.myproject.com上测试升级,而不会干扰主站点的通信。

最后,如果您使用共享托管,DreamHost支持鼓励为每个网站使用不同的用户帐户,但我不知道这有什么不同。对于大量的操作要小心,例如,大型数据导入,因为如果进程使用了大量内存,它可能会被DreamHost杀死。内存上限未指定,但相当低。因此,如果您的站点需要做一些繁重的操作,您需要使这样的操作容错,以便在死后恢复。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18390967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档