0

我是 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,但我有一个简单的“ hello world ”视图可以尝试,但它没有显示。当我访问我的域时,我只得到一个 HTTP 404...

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

4

1 回答 1

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我在、named prod_settings.py、等中有每个环境的设置beta_settings.py
  • 我的网站在~/sites/www.myproject.com,里面的布局:

    • myproject-- 指向 Django 项目的符号链接
    • sqlite3.db-- 符号链接到 Django 项目中的数据库文件
    • public/staticSTATIC_ROOT-- 指向Django 项目中定义的符号链接
    • 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', '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需要该标志。当 a处于活动状态时,所有软件包都安装在该.--userpipvirtualenvvirtualenv

关于requirements.txt

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

请注意,这virtualenv不是必需的,但建议使用。INTERP您可以通过设置passenger_wsgi.pyto 来做到这一点/usr/bin/pythonvirtualenv在同一个帐户上拥有多个具有不同依赖项的 Django 站点很有用。当您想为您的站点升级 Django 时,它也很有用,这样您就可以在beta.myproject.com不中断主站点流量的情况下测试升级。

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

于 2013-08-22T21:54:51.620 回答