Dec 14, 2011

SAE Python

环境设置和本地服务器安装

一般使用 virtualenv
本地有模拟服务器,dev_server


修改 dev_server  (git clone http://github.com/SAEPython/saepythondevguide.git)
安装 dev_server

dev_server 修改如下
1. saecloud.bat 改成
e:\webapp\envs\sae\Scripts\python.exe "%~dp0\saecloud" %*
也就是使用虚拟环境的 python
2. 如果是 windows 系统,还需修改 saecloud 文件(实际上是一个 python 文件)
run函数内(L35)
close_fds=False


如果出现两个依赖模块无法下载
argparse 和 PyYAML,请手动安装
另外 werkzeug 需要0.7.1版本
>pip install werkzeug==0.7.1

文件系统

支持10个快照,类似于 branch
由于 SVN 保存 delta,因此必须有快照。每个快照都是该分支上最新的版本。10个快照具有一定的独立性。是否可以三方融合。


将版本管理和部署分开,前者使用 git,后者使用 saecloud

在线创建一个 some_app
修改 conf.yaml

name: some_app
version: 1

然后使用
$saecloud deploy --username xxx@abc.com --password 安全秘密   (deploy 自动找到版本)

$saecloud export version_number --username xxx@abc.com --password 安全秘密

首次要用户名密码,可能以后不用

由于使用 saecloud/git,本地不再用数字文件夹表示版本



文件系统:
支持三个静态文件目录,由文件服务器直接服务。
/media
/static
/favicon.ico
其他所有请求,都被路由到应用。

鉴于此,用户上传的文件,也要放在 static 下
MEDIA_ROOT = os.path.join(os.path.dirname(__file__),'../static/user').replace('\\','/')

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash if there is a path component (optional in other cases).
# Examples: "http://media.lawrence.com", "http://example.com/media/"
MEDIA_URL = '/static/user/'
由于文件服务器没有访问控制,若是有需要访问控制的用户文件,只能webapp处理?

使用步骤


1. 创建 django project(名字可以不同于 app 名)
在 app 目录
$python e:\webapp\envs\sae\Lib\site-packages\django\bin\django-admin.py startproject

project-name .

2. 修改 project-name/wsgi.py
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tickle.settings")
改成
os.environ["DJANGO_SETTINGS_MODULE"]="tickle.settings"
这一步可能要可能不要,如果提示 settings 找不到,就需要

3. 运行 dev_server
$python e:\webapp\envs\sae\Scripts\dev_server.py

4.
python manage.py startapp xxxx

config.yaml

name: exsae
version: 1

libraries:
- name: "django"
version: "1.4"

handlers:
- url: /static
static_dir: static
- url: /media
static_dir: media


数据库导入

使用 mysqldump,参见
SAE 不支持 lock write,加 --skip-add-locks 参数
$ mysqldump -u apple2101 -p -t --skip-add-locks sae books_author books_book boo
ks_book_authors books_publisher > cars.sql



也可以使用如下方法
本地开发后,在 mysite 文件夹下
$ python manage.py sqlall all-apps-list > some-db-file
all-apps-list 指所有安装的 apps,比如
auth contenttypes sessions sites messages admin cars (注意没有前缀)
然后在 SAE 的管理后台导入 some-db-file

django-admin.py and manage.py
Prints the CREATE TABLE and initial-data SQL statements for the given app name(s).
这种方法好像不能导出数据,只导出数据表?

本地开发的 mysql 问题

1. 本地开发依赖于版本文件夹下的 app.py 文件。在线时,并不用到该文件
2. 建立 config.py 文件,用于保存本地数据库信息。在 settings 中使用,在 settings 中采用 try except 模式进行导入 sae.const

superuser

因为已经知道如何导入数据,所以不推荐下述办法。

因为没有找到导入数据的办法,建立superuser的方法,进入SAE后台手动管理数据库,手动添加superuser
is_active, is_stuff, is_superuser

由于django并不保存密码明文,而是保存sha,所以要先本地建立superuser,dump 数据找到密码 sha.
$ django-admin.py dumpdata --pythonpath=/e/webapp/sae/testkv/2/mysite --setting
s=settings auth > log
进入本地管理界面也可以找到这个sha
然后到SAE后台手动添加这个sha

字符集

python 文件不要写中文,python2x默认为ascii

html utf8

数据库:
在管理界面创建数据表,默认字符集为utf8,也可设为其他编码。
如果你是在本地开发环境建立的数据表,请确保使用utf8。在管理界面导入本地数据库时, 也可完成字符集的转换。

0 comments: