2013-08-22 53 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