bae上部署django的notes

Posted on 五 21 十一月 2014 in 日常

这个网站就部署在bae上的,正好自己在学python,所以就学了下使用django弄个网页。 本来很早就想写部署notes,因为官方的部署很不全,自己遇到好多坑,现在把还记得的重要过程记录一下。

这里的说明先假设在项目的根目录下创建创建了一个django的项目,名为blog,所有他的文件也就包含在/blog下面。

修改index.py

需要把项目的setting放入DJANGO_SETTINGS_MODULE变量中。

#-*- coding:utf-8 -*-
import os
import sys

from django.core.handlers.wsgi import WSGIHandler
from bae.core.wsgi import WSGIApplication
# settings放入变量中
os.environ['DJANGO_SETTINGS_MODULE'] = 'blog.settings'
#将项目目录加入到path中
path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'blog').replace('\\','/')
if path not in sys.path:
    sys.path.insert(1, path)

修改app.conf

app.conf主要是用来控制后端WEB server的处理逻辑的,可以参考bae技术博客

它可以直接处理静态请求,然后把动态请求都转发给后端的webServer。

handlers:
  # 静态请求直接返回静态资源
  - url : /static/(.*)
    script : /blog/blog/static/$1
  # 动态请求转发给index.py
  - url : /.*
    script: index.py

  - expire : .jpg modify 10 years
  - expire : .swf modify 10 years
  - expire : .png modify 10 years
  - expire : .gif modify 10 years
  - expire : .JPG modify 10 years
  - expire : .ico modify 10 years

数据库连接

使用数据库以及django自带的管理模块admin,需要将python目录下的/Lib/site-packages/django/contrib/admin文件夹拷贝到上面设置的静态文件路径下/blog/blog/static/

settings.py需要修改下数据库连接设置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DBNAME', 
        'USER': 'USERID',
        'PASSWORD': 'PWD',
        'HOST': 'sqld.duapp.com', 
        'PORT': '4050', 
    }
}

本地运行与上线发布

上线发布需要把settings.py设置为生成模式,debug=False

因为装bae的本地开发环境比较麻烦,所以我在本地运行时,都是直接用runserver方式开启调试模式的,这时就需要设置静态文件的目录,以便获取静态文件

settings.py修改设置:

......
DEBUG=True
......
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')
STATIC_URL = '/static/'

import os
STATICFILES_DIRS = (
    ('css', os.path.join(STATIC_ROOT, 'css').replace('\\', '/')),
    ('img', os.path.join(STATIC_ROOT, 'img').replace('\\', '/')),
    ('js', os.path.join(STATIC_ROOT, 'js').replace('\\', '/')),
)