9月 23

python到mysql 2006问题解决

  tornado和Django框架都是使用MySQLdb,在长时间不与数据库有交互,如采集、SQL运行数据过大而数据库等待时间过短等,这时会报“Error 2006: MySQL Server has gone away”错误。收集了网上的三个解决方案是,
  一、修改数据库的参数wait_timeout,interactive_timeout到2880000,
  二、在每次连接时做判断,如果报错将再连接一次(http://xulizhao.com/blog/python_db)。

class DB:
    conn = None
    def connect(self):
        self.conn = MySQLdb.connect(localhost,root,pass,test)
    def cursor(self):
        try:
            return self.conn.cursor()
        except (AttributeError, MySQLdb.OperationalError):
            self.connect()
            return self.conn.cursor()

  三、定时进行连接,以防断开

from tornado.ioloop import PeriodicCallback

#torndb.Connection(host, database, user=None, password=None, max_idle_time=25200, connect_timeout=0, time_zone='+0:00')
db = torndb.Connection(db_ip, db_database, db_user, db_pass, db_conn_time)
# https://github.com/felinx/poweredsites/blob/master/poweredsites/db/mysql.py
# ping db periodically to avoid mysql go away
PeriodicCallback(db.query(show variables), 3600*4*1000).start()

我的测试,第一种方法比较好用,但是在某些情况下会造成其它问题。第三种效果不理想,需要继续研究。第二种正在试验中。

9月 10

开源的webdeploy部署系统

介绍
  Web部署工具。主要针对小型网络环境进行,有部署、回退、权限管理、日志记录等功能。
  此部署系统是用Python2.6(以上)+Tornado开发,以调用命令的方式进行工作,用WEB界面形式进行管理。该系统需要用到第三方工具,如ssh、rsync等。所使用到的第三方工具的安装,都已经编写在安装脚本中,只要在能连接互联网的机器上可以使用安装脚本自动完成。但是基础的python环境需要手动安装,如果系统自带的版本过低,建议安装新版本(该系统还不能使用python3.x)。该工具使用推送和远程调用命令方式,所以没有agent端,部署配置后既可以使用。由于属于个人开发,所以我的操作系统为CentOS、raspberry pi、pcduino。
所用到的模块示意图如下:
deploy_tool模块20130906
  该系统可以单进程或多进程进行部署,多进程是使用线程方式进行控制,建议为3个不要超出。在单进程情况下10个Tomcat服务部署完毕(传送文件网络耗时按3秒钟算)大约一分钟,因为tomcat需要重启耗时比较长,所使用时间大约是php、python、ruby类代码的3倍。使用多线程部署Tomcat类大约要35-40秒。此系统对于JAVA依赖于tomcat的服务适合在20个左右的服务环境中使用。脚本类的大约在50到60个服务环境使用。如果想以更快的方法,部署跟多的服务器,可以使用推送部署脚本的方式进行,后面在做介绍。
注意两点:1)以上所说服务环境是指服务程序部署的套数,而不是物理服务器的台数。
2)如果部署tomcat下的服务,为了避免因为环境变量造成的问题,需要编写一个适合远程使用脚本。可以http://www.simonzhang.net/?p=1951

安装介绍
安装环境要求
  操作系统:CentOS 或Raspberry pi 。基础运行环境:python2.6或python2.7。数据库:mysql。
  原则上可以运行在任何python2.6以上版本搭建的linux服务器上,但是本人只测试了CentOS和Raspberry pi。演示环境为Raspberry pi。

安装步骤
  首先创建数据。数据库创建部分不详细记录。如获得数据库信息:账号:deploy、密码:123456、库名为:deploytest、数据库IP为:192.168.1.130。数据库使用UTF-8编码。
  将deploy代码放到相应目录中。(提醒:因为此系统安装需要安装第三方的框架和工具,建议在root权限下安装,并且装过程需要连接互联网)。测试过程将代码放置到/program/deploytest目录中。
  开始安装。进入部署工具下的install目录,给install.sh可执行权限后并运行。执行效果如下:
deploy_tool_install
  红字部分为系统的安装提示,黑色字为输入信息。信息输入完点击回车。当系统id输入点击回车后系统开始安装。需要注意的部分“Domain Name”、“local global ip”和“local global port”的关系。“Domain Name”可以是外部访问域名,也可以是直接访问的IP+端口的地址,如果为域名需要前端有使用80端口WEB服做映射,如apache、nginx等。“local global ip”为WEB服务映射的地址,“local global port”为WEB服务映射的端口,在部署系统启动时此端口会被部署系统占用。
  如安装脚本没有报错,则安装完成,系统自动启动。如果自动系统失败,可以尝试下面的操作。
  退到部署系统的根目录,使用命令”chmod 755 main.sh”给启停脚本可执行权限。使用命令“./main.sh start”启动服务,如看到“start ok!”则为启动成功。如果失败还可以手动启动,可以下载说明文档。
整个系统压缩后31KB。是个小型的Web部署工具。如有问题可以发邮件给我,大家互相学习。
google直接下载方法:svn checkout http://my-webdeploy.googlecode.com/svn/trunk/ my-webdeploy-read-only
部署工具说明文档-20130910
webdeploy-5.zip