六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 1039|回复: 0

百e购开发日记(一)

[复制链接]

升级  30%

3

主题

3

主题

3

主题

童生

Rank: 1

积分
15
 楼主| 发表于 2013-2-7 10:04:55 | 显示全部楼层 |阅读模式
百e购开发日记(一)
 
历时大概18个月的开发,主要是周末和晚上,百e购终于蹒跚的来到这个人间,best100shop是啥? 具体查看。 从开始到现在经历了不少有意思的事情和困难,学到了不少的东西,很多是程序之外的,现把开发中的种种经历总结出来,和大家分享,很多地方还不成熟,主要是初学者避免走弯路。有点乱有的倒叙,先拟定分十二个小章节,根据具体的情况再增加或减少。
 
1.    部署
2.    Logging
3.    Job 的定义
4.    图片处理
5.    Model(模型)
6.    View & Template(视图和模板)
7.    Control(控制器)
8.    Tips
9.    Utility
10.    OAuth
11.    CSS & Javascript
12.    技术之外
 
1.部署
 
感谢好友提供服务器,国内还有一个比较便宜和方便操作的 RubyOnRails 托管商(软广告)。当然我的程序是Python的,尚没有人在服务器上面使用过,所以很多环境从头开始操作。
 
1.1 Django 项目包结构
默认的结构,不多述,官方的是:
 
mysite/    __init__.py    manage.py    settings.py    urls.py    
默认的Django 的每个子的 application 都是在根目录下,比如:
mysite/application_one/   
但是往往,整个项目包含很多个application有自己的也有开源的第三方的,还有很多的utili包啊等等, 如果一股脑的放置在项目的根目录下,那会很乱不便于管理。所以一般的,我们会选择在分几个目录,比如:
 
 
  mysite/      apps/   # 专门我自己的 application         application_one/      extras/  # 第三方 Django application         extend_application/       libs/   # 独立的第三方包         third_parser/      utils/  # 我自己的帮助类         help.py   
好了这就是基本的项目包结构,根据你自己的项目的实际需求,你在做调整。
 
1.2 服务器环境搭建
托管主机当然是使用Apache,直截加一个VirtualHost。现在是依赖于 modwsgi ,在配置里面需要加入WSGIScriptAlias:
WSGIScriptAlias /  /{{YOUR_PROJECT_HOME}} /django.wsgi
 
这个不要你操心,托管商会自动帮你添加的。到这里你可能也知道你默认的 Django 生成的项目结构里面没有 django.wsgi,不错, 这个是需要你手动维护的,具体文件的含义参考官方, 在你的项目的根目录创建 django.wsgi. 你需要添加下面的东西
 
#!/usr/bin/python#-*-coding:UTF-8-*-#import os, syssys.stdout = sys.stderr # 如果你的项目里偶尔带个 print 的话,添加这个 modwsgi 会讨厌这个,严禁的话应该使用 logging ,下面将详细描述sys.path.append('{{YOUR_PROJECT_HOME_PARENT}}') # 这个是我的托管商这里需要的sys.path.append('{{YOUR_PROJECT_HOME}}')os.environ['DJANGO_SETTINGS_MODULE'] = '{{PROJECT_NAME}}.settings'import django.core.handlers.wsgiapplication=django.core.handlers.wsgi.WSGIHandler()   
1.3 第三方Python 包
 
总是有很多项目需要很多特别的第三方包, 一般管理员不会安你的要求去安装,而其总是有那么几个关键的包有版本冲突。在完善的开发环境中应该有严禁的代码版本管理体系,小回忆一下,在花旗,内部有一个叫xenv的系统,管理各种第三方的库, 提供一个控制台,web 界面让你配置项目需要的第三方库。在发布和开发中,当你配置好后会有一个ID ,你将此ID 提交到自动打包系统,他就会将你选择的第三方都检测一遍,打好一个.destream文件,发布很轻松。 话又回来。好现在既然管理员不能随叫随到,我们自己来配置, 这里在我们自己的HOME 目录下我们创建于一个这样的目录:
 
 
home/  my_name/     lib/      python*.*/ #  Python 的版本 比如 python2.5       site-packages/   
很眼熟? 对的就是标准Python 安装目录下的site-packages 目录结构, 这里我们是使用是 Python setuptools  来安装的,下面我们陆续的把我们需要的 pyhton 第三方包下载下来了。准备安装了。 由于我们没有权限往系统的 site-packages 安装包,所以在命令的时候我们需要传入–prefix  参数:
 
python setup.py   --prefix=/home/MY_NAME   
 
安装完后, 到我们自己的 site-packages 下面瞅瞅看看是不是安装上去了。
 
1.4 再次调整项目
做了很多的定制,显然默认的种种设置需要调整。
将自己的site-packages添加到我们的运行环境中。 在项目的 settings.py 里面我们添加上下面的代码:
 
sys.path.insert(0, '/{{MY_LIB)}/site-packages/*****.egg')sys.path.insert(0, '/{{MY_LIB}} /site-packages/')   
这样子使自己包的优先级别会比系统的高。
 
将我们额外添加的目录加入到路径中(在上文配置的):
 
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'apps'))sys.path.insert(0, os.path.join(PROJECT_ROOT, 'extras'))sys.path.insert(0, os.path.join(PROJECT_ROOT, 'libs'))   
1.5 跑一把看看
 
首先我们需要吧表都创建好, 这个时候需要 Django admin 命令了,熟悉 django 的人都知道 syncdb就可以了,
django-admin.py syncdb   
报错了:
Error: Settings cannot be imported, becauseenvironment variable DJANGO_SETTINGS_MODULE is undefined.
 
 
Django 依赖项目的  settings.py 来启动, 显然系统找不找到这个settings.py 我们需要显式的export 这个参数:
 
export DJANGO_SETTINGS_MODULE={{MY_PROJECT_NAME}}.settings
再跑一把,又一个错误:
Error: Could not import settings '{{YOUR_PROJECT_NAME}}.settings'(Is it on sys.path? Does it have syntax errors?): No module namedbest_v06.settings
 
还差点点。 我们需要export 另外一个变量:
 
export  PYTHONPATH={{PROJECT_PARENT_DIR}}   
比如我的是:export  PYTHONPATH=/home/my_name/web
我的项目在  /home/my_name/web/my_project
再跑一下, 终于在创建表了, 这是第一步。
 
好了,这次就到这里,下面将Logging配置,一个成熟的项目Logging非常重要,特别是在大型复杂多人开发的系统,没有Logging 将来的技术支持将会是地狱,这也是为什么千万小心在代码中使用 print 这样的东西, 一个设计优良的结构封面记录详细的Logging将会是一个健壮成功的项目必要组成。
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表