SAEPy blog

学习在 SAE 上使用 python 建立应用

轻松搭建SAE Python 本地运行环境

3 years ago 11



要搭建SAE Python 的本地运行环境还是有点麻烦,相对GAE 来说,毕竟SAE 刚内测一个多月。下面简单说一下Window 下搭建的过程。

环境需求

比如我想用tornado + Mysql

下载安装

官方说是确保python 版本是2.6 (2.5不行,我的用2.7也可以)

打开官方的安装文档
https://github.com/SAEPython/saepythondevguide
或者点这直接下载压缩包
解压,打开dev_server 目录,
按你的需求修改 setup.py,我用tornado 就修改如下


    install_requires = [
        'Werkzeug', 
        #'Django==1.2.7',
        #'bottle==0.9.6',
        'tornado==2.1.1',
        #'Flask==0.7.2',
        #'flask-sqlalchemy',
        #'Uliweb',
        #'jinja2',
        'MySQL-python'
        ],

打开cmd 黑窗口,在dev_server 目录下运行
python setup.py install
如果你还没有把python的路径添加到环境变量则会提示没有python该命令,
这可能会提示 No module name setuptools

到这 http://pypi.python.org/pypi/setuptools 下载与你python 版本对应的setuptools
我下载了 setuptools-0.6c11.win32-py2.7.exe (md5) MS Windows installer 2.7
下载后双击,一直next到完成,
再运行 python setup.py install
如果最后一句erro: 后面是空则安装完成

简单建立本地程序测试目录

随便在某个地方建立一个saeapp来装app,如我的saepy,下面是对应的目录和文件:
建立一个index.wsgi 文件放在 saeapp/saepy/ 目录下,index.wsgi 的内容

import sae

def app(environ, start_response):
    status = '200 OK'
    response_headers = [('Content-type', 'text/plain')]
    start_response(status, response_headers)
    return ['Hello, world!']

application = sae.create_wsgi_app(app)

把上面dev_server 目录下的dev_server.py 拷贝到saeapp/saepy/ 目录下(这个不是必要,你可以安装dev_server.py ,让dev_server.py在path中就可以,你可以参考这里安装),为了方便可在同目录下建立一个bat文件,如run.bat,
run.bat 内容 python dev_server.py
如果没出错的话就会出现下面内容:

MySQL config not found: app.py
Start development server on http://localhost:8080/

则打开 http://localhost:8080/ 就会看到 Hello, world! 了。

这样简单的环境就弄好了,如果要使用Mysql 数据库就装上它,看看能不能单独装上它,或者图省事就安装一个N合一的包,如appserv 或 easyapm

数据库配置

为了能在本地测试和SAE 生产环境正常运行得先识别,你可以到 这里 先看看SAE 生产环境有什么特殊的固定的变量。
下面是我使用的方法

from os import environ

debug = not environ.get("APP_NAME", "")

目前本地测试环境的os.environ 没有APP_NAME 键,如果日后有变就换其它的。

下面是不同的环境使用不同的数据库配置


##数据库配置信息
if debug:
#本地
    MYSQL_DB = 'app_saepy'
    MYSQL_USER = 'root'
    MYSQL_PASS = '123'
    MYSQL_HOST_M = '127.0.0.1'
    MYSQL_HOST_S = '127.0.0.1'
    MYSQL_PORT = '3306'
else:
#SAE 真实环境
    import sae.const
    MYSQL_DB = sae.const.MYSQL_DB
    MYSQL_USER = sae.const.MYSQL_USER
    MYSQL_PASS = sae.const.MYSQL_PASS
    MYSQL_HOST_M = sae.const.MYSQL_HOST
    MYSQL_HOST_S = sae.const.MYSQL_HOST_S
    MYSQL_PORT = sae.const.MYSQL_PORT
    
#主数据库 供更新
#从数据库 供读取

使用Tornado database 来操作Mysql 数据库

from tornado import database

#连接主数据库
mdb = database.Connection("%s:%s"%( MYSQL_HOST_M, str(MYSQL_PORT)), MYSQL_DB, MYSQL_USER, MYSQL_PASS, max_idle_time = 5)
#连接从数据库
sdb = database.Connection("%s:%s"%(MYSQL_HOST_S,str(MYSQL_PORT)), MYSQL_DB, MYSQL_USER, MYSQL_PASS, max_idle_time = 5)

#SAE 的Mysql 只能保持5秒空闲连接(文档说30秒其实更少)
#在使用前先用 _ensure_connected 函数确保连接

sdb._ensure_connected()
return sdb.get('SELECT `add_time` FROM `sp_posts` ORDER BY `id` DESC LIMIT 1')

建议阅读tornadowebdatabase 源码

用SVN 管理你的应用

这是目前SAE 支持的较好方式,参见官方SVN 教程

后记

没有很好的组织语言,只是按实际操作步骤记录下来,如果你有什么问题可以直接回复本帖交流探讨。

Incoming search terms:



Comments

There are 11 Comments to "轻松搭建SAE Python 本地运行环境"

本主题还有 1 条评论未显示, 猛击这里往下翻 ↓

Write a Comment