SAE Python应用运行于沙箱环境之中,SAE会根据负载在后端的多个节点中选择一个来处理HTTP请求。 SAE Python支持标准WSGI应用。
命名规范:
应用目录
SAE上的每个应用可以同时运行多个版本,版本以数字为标示,默认版本为1。 每个版本对应于应用svn根目录下以其版本号命名的一个目录,称为版本目录, 应用的代码(index.wsgi等)必须放到版本目录里。
以应用longtalk为例,这个应用有6个版本:
jaime@westeros:~/longtalk$ ls
1 2 3 4 5 6
jaime@westeros:~/longtalk/1$ ls
index.wsgi myapp.py
应用默认版本代码所在的目录,称为应用目录。 该目录会添加到Python runtime的 sys.path 中。该目录也为应用运行时的当前目录。
访问指定版本的应用: http://<version>.<application-name>.sinaapp.com
不推荐使用os.getcwd()来获取路径信息,建议使用__file__属性。
名称 支持的版本 默认版本 django 1.2.7, 1.4 1.2.7 flask 0.7.2 0.7.2 flask-sqlalchemy 0.15 0.15 werkzeug 0.7.1 0.7.1 jinjia2 2.6 2.6 tornado 2.1.1 2.1.1 bottle 0.9.6 0.9.6 ulibweb 0.0.1a7 0.0.1a7 sqlalchemy 0.7.3 0.7.3 webpy 0.36 0.36 Flask-WTF 0.5.2 0.5.2 WTForms 0.6.3 0.6.3 PIL 1.1.7 1.1.7 MySQLdb 1.2.3 1.2.3 sinatpy 2.x-(2011-6-8) 2.x-(2011-6-8) numpy 1.6.1 None
Note
需要使用非默认版本可以在config.yaml中指定。
静态目录
其他所有请求,都被路由到/index.wsgi:application,即应用根目录index.wsgi文件, 名为application的callable,暂不可修改。
application 使用下列方式创建
将标准wsgi应用封装为适宜在SAE上运行的应用
import sae
def app(environ, start_response):
# Your app
...
application = sae.create_wsgi_app(app)
Python runtime使用的是Python 2.6.7。
本地文件系统可以读取本应用目录,Python标准库下的内容,不支持写入。 如需读写临时文件建议使用StringIO或者cStringIO来替代。
Python默认的模块搜索路径为:当前目录 > 系统目录。添加模块搜索目录的方法为:
import sys
sys.path.insert(0, your_custom_module_path)
注意:Python当前目录下的子目录只有包含__init__.py才会被Python认为是一个package, 才可以直接import。
SAE设置了一些自定义的环境变量,这些环境变量可以通过os.environ这个dict获取。
打印到stdout和stderr的内容会记录到应用的日志中心中, 所以直接使用print语句或者logging模块来记录应用的日志就可以了。
日志内容在 应用»日志中心» HTTP 中查看,类别为debug。
SAE Python会对应用导入的模块(包括index.wsgi)进行缓存,从而缩短请求响应时间, 对于缓存了的应用,请求处理只是取出index.wsgi中application这个callable并调用。
应用程序的配置文件为应用目录下的config.yaml文件。
使用第三方库
libraries:
- name: django
version: "1.4"
- name: numpy
version: "1.6.1"
name为第三方模块的名称,version为需要使用的版本,这两个字段为必填字段。
静态文件处理
静态文件夹
handlers:
- url: /static
static_dir: static
url为URL的前缀,static_dir为静态文件所在的目录(相对于应用目录)。
Note