在新浪SAE上部署应用实战心得

      最近几日学习了一下Bottle,这是一种用Python编写的轻量级的Web框架。类似的框架还有Flask,Tornado,Django,尽管后两者相对比较重量级。Bottle的文档简单清晰(http://bottlepy.org/docs/0.12/index.html),其中的“Todo-List Application”是一个很好的例子,在本机实现这个示例程序之后,我计划将其部署到真实的网站上,顺便也学习一下部署的过程(最后的成果见:http://simpletodo.applinzi.com/,很简陋,但主要是做为练手项目已经足够,Web框架的几个关键概念都练了一下)。


      选择新浪云应用SAE(
http://sae.sina.com.cn/)之后,发现实际的部署过程又是一个需要不断学习、思考、尝试、总结的艰辛过程。新浪的文档有些散乱,SAE本身也有不少坑,在此整理一下部署步骤和绕坑方法,供大家参考:


应注意避开的坑:
1、新浪SAE支持的Python版本是2.7,所以请提前调整好本地环境
2、数据库方面,SAE不支持python自带的sqlite3。可以考虑采用MySQL,并使用新浪SAE的数据库服务,详见
https://www.sinacloud.com/doc/sae/php/mysql.html
3、SAE中的Bottle采用的是0.9或更早版本,不支持route中的过滤器功能。所以对于正则表达式等请考虑使用老版本。(也有文档指出,可以升级SAE的依赖库的,PosPro没有做测试,列出来供参考:
http://simple-is-better.com/news/834
4、新浪SAE的本地开发环境sae-python-dev似乎在virtualenv下无法使用,可以考虑直接全局安装(此点不确定,也可能是我的配置存在问题)


调试和部署步骤
S1、在本地写好程序并调试通过

S2、参照SAE的要求(http://www.sinacloud.com/doc/sae/python/tutorial.html#hello-world),建立config.yaml文件,其实就两句:

name:应用名(应该与将来在SAE上建立应用的名称相同)
version: 1

S3、建立index.wsgi文件,针对不同的WEB框架(Bottle?Web.py? Flask ?),文档(http://www.sinacloud.com/doc/sae/python/tutorial.html#hello-world)中有不同要求。对于Bottle来说,核心也就两句话:

import sae
...
...
application = sae.create_wsgi_app(app)

S4、完成以上几步之后,你的程序就基本可以上线了,可以选择直接上传至SAE(具体方法见S6),实际测试功能。

(S5、建立本地测试环境进行测试,本步骤为可选步骤。)

(S5.1)、通过pip install sae-python-dev安装本地测试环境,建议全局安装而不是在virtualenv下安装。按照完成后,就可以通dev_server.py来对程序进行本地测试。(详见:http://www.sinacloud.com/doc/sae/python/tools.html#ben-di-kai-fa-huan-jing
(S5.2)如果使用MySQL,还需要安装MySQLdb(以便import MySQLdb)。在Windows环境下,可以下载MySQL-python(
https://pypi.python.org/pypi/MySQL-python/1.2.5
(S5.3)如果想在本地真正完成包括数据库读写方面的测试,还得安装MySQL主程序。在这里要注意由于MySQLdb兼容性的问题,MySQL只能选择MySQL-3.23~5.5(地址:
http://dev.mysql.com/downloads/mysql/5.5.html#downloads
(注:如果按照S5.3步骤在本地按照MySQL数据库,其数据库命名恐怕也要按照SAE的规定,本人未做此步,写出来仅供参考。其实,如果不觉得反复上传是一种麻烦的话,S5步骤都可以省略。直接上传SAE之后,也是可以测试和分析的。最后需要说明的是SAE自己也在文档中指出,本地开发环境的功能并不完善。)


S6 向SAE上传程序,具体步骤可参考(http://www.sinacloud.com/doc/sae/python/tutorial.html#hello-world),也可按照我下面梳理的步骤来:

S6.1 如果你的机器上没有安装过git程序的话,先安装一个(PosPro用的是Git-2.7.0-32-bit)

S6.2 学习git的基本使用,一个比较详细的教程(http://blog.jobbole.com/78960/),比较关键的几个命令列举如下:

git init —— 把当前目录设置成git管理的仓库
git add XXX(文件名)——把文件添加到暂存区里面去 
git add . ——把当前目录的所有文件都添加进去
git remote add sae https://git.sinacloud.com/应用地址——连接SAE上的具体应用
git commit——把文件提交到仓库
git push master:数字(版本号)——上传某一版本的数据
git pull sae :Version —— 下载数据
避免每次push都输入密码的繁琐,可以在执行push之后加一句:
git config --global credential.helper wincred
详细参见
https://help.github.com/articles/caching-your-github-password-in-git/

S6.3 利用Git向SAE上传数据, 详细参见http://www.sinacloud.com/doc/sae/tutorial/code-deploy.html#git

S7 在SAE上建立配套数据库

S7.1 针对具体应用,进入“管理应用”页面,在页面左侧的导航栏中,找到“数据库服务——共享型MySQL”,在这里就可以管理和创建自己的MySQL数据库表了

S7.2 SAE提供的这个管理界面虽然简陋,但还是比较方便的,可以选择自己建表,也可以导入数据,详见文档(http://www.sinacloud.com/doc/sae/services/mysql.html

S7.3 如果您和我一样计划用MySQLdb来做连接的话,下面的例子可供参考:

##下面是SAE对数据库变量的定义
	#sae.const.MYSQL_DB      # 数据库名
	#sae.const.MYSQL_USER    # 用户名
	#sae.const.MYSQL_PASS    # 密码
	#sae.const.MYSQL_HOST    # 主库域名(可读写)
	#sae.const.MYSQL_PORT    # 端口,类型为<type 'str'>,请根据框架要求自行转换为int
	#sae.const.MYSQL_HOST_S  # 从库域名(只读)

##利用MySQLdb连接的实例
	import MySQLdb
	db = MySQLdb.connect(port=int(sae.const.MYSQL_PORT), host=sae.const.MYSQL_HOST, db=sae.const.MYSQL_DB, user=sae.const.MYSQL_USER, passwd=sae.const.MYSQL_PASS)

S8 反复测试吧


      PosPro最后的成果见:http://simpletodo.applinzi.com/,很简陋,但主要是做为练手项目已经足够,Web框架的几个关键概念都练了一下。





你可能感兴趣的:(sae,Bottle,web框架,新浪云应用)