对程序员来说,新浪云SAE无疑是国内最好的PaaS平台,实名认证和绑定移动端得到的免费云豆,可以让你在做出一款能抬起头的应用之前不愁吃喝。
所以这一年里做过的网站和应用,第一个版本都是起于SAE。
对于Python的网络框架,小2原本专攻大路货Django,工作中被一高手点醒后,开始迷醉于Tornado的快。对,并不是非阻塞的快,而且开发的快,极适合做前后端分离、以JSON传递数据的模式。
人老怕忘,随手记记Tornado在SAE上的坑。
ORM的选择
sqlalchemy既不简洁又缺乏一致性,但建表、重连、SQL包装、连接池这些dirty job总得有人做。sqlalchemy的使用必须注意以下问题:
连接的创建和关闭
因为SAE的MySQL超时时间设置得很短(10秒左右),因此在网络连接关闭的时候必须同时关闭数据库连接。最好的办法是都继承一个BaseHandler。
python
class BaseHandler(tornado.web.RequestHandler): def initialize(self): self.session = DB_Session() def on_finish(self): self.session.close()
缩短重连时间
因为超时时间比MySQL的通用配置要短,所以sqlalchemy的重连时间也必须同步,否则会报「MySQL has gone away」的2006数据库错误。我的配置仅供参考:
python
engine = create_engine(db_config, pool_recycle=5, poolclass=NullPool)
secure_cookie
一般都会选择Tornado的secure_cookie作为账号的惟一凭证,上线必须找一个不改变(重新部署后之前的cookie不失效)也不容易让外人得知的字符串做密钥。我应用的secret_key:
python
cookie_secret = 'test' if debug else sae.const.SECRET_KEY
日志
SAE的logging默认级别是warning,所以logging.info(”)是不会生效的,最好在入口处设置:
python
logging.basicConfig(level=logging.INFO)
余不一一,GitHub传送门:SAETornado。
来自:建造者说