requests.exceptions.SSLError when running a py2exe generated EXE file

最近做个兴趣小项目,需要用python来get/post https请求,用到了requests模块,因为要在windows下使用,考虑到易用性和小白玩家的需求,使用py2exe生成exe。参考链接看起来很简单,统共分三步:1,安装py2exe;2,准备一个配置脚本,我们叫他build_exe.py;3,执行一条命令python build_exe.py py2exe

先把这个简单的初级版本放这里:

#usage: python build_exe.py py2exe

from distutils.core import setup
import py2exe

setup(console=[‘myqqbot.py’])

但是这里其实还是有坑的,安装py2exe要注意,并不是直接pip install py2exe就可以了,py2exe是人家python3专用的,python2的是py2exe_py2,悲剧吧,所以装包前最好还是pip search下,免得浪费时间还不知道错在哪。配置脚本貌似简单,大家应该能想到这里面其实是有很多玩法的,以至于需要一个脚本而不是直接传参。

 

生成过程很顺利,不过几秒exe文件已经躺在dist目录下了。但是双击他,console一闪而过,都不知道发生了什么。Windows就是这么变态,反正把你当小白,不给你任何错误信息。在超级难用的cmd里面用命令行调用exe后发现了问题:

requests.exceptions.SSLError: [Errno 2] No such file or directory

万能的stackoverflow告诉我们,不要慌我有药,药在这。so大夫告诉我们在exe文件执行的时候环境变量发生了改变,找不到这个pem文件了,我们需要给一个静态的pem文件路径,或者设置一个REQUESTS_CA_BUNDLE环境变量,因为不知道这个exe文件会在什么环境下执行,不能保证所在的环境中有这个pem文件,所以我们必须在打包的时候打一个pem文件进去。到此产生两个新问题:1,如何获取cacert.pem文件;2,怎么用py2exe打包,当然你肯定能想到直接放到生成的dist目录下面就可以了,但是这样是不是太low了,我们要有更elegant的方法。 Continue reading “requests.exceptions.SSLError when running a py2exe generated EXE file”

在国内使用WordPress飞起来的秘籍

正如前面几篇关于本站的各种搬迁历史文章所述,现在本站使用阿里云的虚拟机;

但是,从第二次搬家到现在,一直深深困扰我的网页打开巨慢的问题今天终于解决了!!!

F**K GFW!!!

迁到阿里云上以后,立即发现WordPress的打开速度变得神奇的慢,经常把chrome浏览器都卡死了。我虽然贪图便宜买了个低配的机器,但也不至于连个WordPress博客都扛不住吧。看了cpu,内存,网络,压力都不大啊,ping下来比原来的日本vps要快多了啊,为什么呢?原来慢是网络卡可以理解,现在这个没法解释啊。

终于,我放下了作为一个搞底层优化的砖家的自尊心,百度了一下(原来是Google的,人家根本不懂中国国情,完全不能解决中国问题~),就看了一个网页,第一个方法就立即让我醍醐灌顶,看到了一个属性的敏感词“Google”:“取消谷歌Open sans字体加载”。尼玛啊~不用再看了,一定是这个原因,于是我打开chrome调试器,刷新下网页,果然。。从google获取字体timeout了。。看来我还是底层思维啊,只知道看操作系统层面的数据,要是在开始的时候就按下F12,早就不受这个罪了。

安装了“Disable Google Fonts”这个WordPress插件后,我的小站飞起来了!!!

必须再次F**K一下GFW,浪费了我宝贵的时间和精力,最主要是打击积极性啊,我不得不把更新太少的锅分一点给它~~

WordPress忘记登录密码怎么办?

好不容易想发个文章,发现chrome把我的WordPress登录密码丢了,天呐!作为浏览器你都不知道我哪知道?我那么多的账号。。好吧,我太懒了,又好长时间不更新了。

核心方法:
mysql> update wp_users set user_pass=”xxxx” where id=1;

1)xxxx是密码的md5值,需要生成一下,有个网站很方便:http://www.md5decrypt.org/
2)id=1换成你要改密码的那个user的ID,在MySQL里面查:select * from wp_users;

参考链接:

How to reset WordPress admin/users password from Linux command line?

第二次搬家即备案和换域名

在阿里云备案很简单,买个.com域名,阿里云注册一堆信息,发来一张阿里云墙纸,拍张照发过去,接几个电话。

域名解析换一下,鼠标点点就OK了。

mysql备份恢复到新的server,然后替换数据库中所有的原域名。

下面是替换全站的所有设置信息和内容中的旧域名的方法:

UPDATE wp_options SET option_value = replace(option_value, ‘www.luoben.xyz’,’www.luo666.com’) ;
UPDATE wp_options SET comment_author_url = replace(comment_author_url, ‘www.luoben.xyz’, ‘www.luo666.com’) ;
UPDATE wp_comments SET comment_content = replace(comment_content, ‘www.luoben.xyz’, ‘www.luo666.com’) ;
UPDATE wp_posts SET post_content = replace( post_content, ‘www.luoben.xyz’,’www.luo666.com’) ;

本站搬家小记

由于众所周知的原因,linode节点的访问十分不稳定,上一篇文章是刷新了至少5遍才发成功了。经常写着写着就发现预览和提交等等的按钮已经灰了。在我朝混久了都知道人怕出名猪怕壮,能被不稳定也是说明了linode在我朝的市场份额举足轻重。如此不稳定的服务器怎么支持我的中国梦,必须换啊。还是前面文章http://www.luo666.com/?p=4提到的原因,我的域名属于国际域名备份不方便,用国内的服务器还必须备份,所以还是要用境外服务器。可惜了我大阿里云的服务器便宜又好用。话说我司的境外服务器也是自带围墙的,看来我朝的防御体系真是固若金汤,至少在墙内看起来是这样。现在的这篇文章已经是在新站上发的了,下面简单记录一下这次迁移的过程,以备不时之需。没办法,这个可能性还是很大的。

基本步骤:

1,安装mysql,php,nginx如果没有的话。尽量使用VPS自己提供的APT源,原因见后面。

    apt-get install mysql-server mysql-client
    apt-get install php5-fpm php5-mysql
    apt-get install nginx

2,使用rsync将原服务器的wp站点目录同步到新站点。rsync要用来从原来的服务器上同步文件,这个比scp好,能压缩,能通过配置参数自己解决冲突,还能在覆盖之前做备份,总之比格很高。

    rsync -avuzb <src> <dst>

3,将原服务器的mysql数据库全部备份,到新服务器restore。

backup:
    mysqldump -u root -p --all-databases > /tmp/backup.sql
restore:
    mysql -u root < backup.sql>

4,将原服务器的nginx站点配置文件/etc/nginx/sites-available同步到新服务器,需要的话修改其中的配置文件,比如你在第二步改变了站点目录的路径。在/etc/nginx/sites-enabled下建立软连接到前面的服务器配置文件。
5,测试一下用ip能不能访问新站点,不能访问就看nginx日志解决问题。详见下面。
6,到你的域名解析提供商的网页修改DNS目标地址。

遇到问题:

1,这台机器上真是很干净,git,sudo,rsync,等等一概没有,更别提mysql,php,nginx等等了。幸而apt是有的,于是就先装这些工具。装到mysql时发现依赖问题,印象当中都是丝般顺滑的直接自动安装依赖包啊。于是我就手贱的将APT源换成了大阿里云的源镜像地址,然后apt-get update发现了两百多个需要升级的包,我窃喜,以为找到了不顺滑的终极原因,于是apt-get upgrade,这个回车下去,一个下午时间就没有了。。。不但upgrade无论如何也不成功,而且什么包都装不了了,被rsyslog的安装错误挡住了,各种workaround各种问题,最后发现这个VPS是个OpenVZ,这货是修改过的内核做的轻量级虚拟化,后面的文章也许我会写写这个内容,这个是我的主业,讲不清楚愧对江东父老。回到主题,至少这种VPS的一大弊端就是无法更新通用版本的包,因为内核版本就是这么低2.6.32,那么lib库比如glibc这种版本就上不去,于是后面一堆的包只能停留在某个版本。所以不能轻易的修改VPS提供的APT源,尤其是发现一堆需要升级的包时要慎重。在各种downgrade后,终于可以装包了,最后我心力交瘁的时候,小伙伴把mysql搞定,还是指定了低版本的依赖包解决。但是第二天,我满血恢复准备继续迁站工作时,发现ssh连不上了。ping还是可以通的,于是通过VPS服务商提供的console通道(对串口做的封装,挺顺畅的)进去,重装了openssh-server。这个过程还是异常难受,要downgrade一些包,一个个的用apt-cache policy <package>看过去,然后找到VPS提供的源对应的那个包的版本,再指定安装:apt-get intall <package>=<version>。随后,我继续php的安装,发现依赖包及其的多,如果要一个个的downgrade下去,人都要崩溃,还不知道出什么问题。还好我灵机一动,发现依赖包里有dpkg,这么基础的东西不对,那么影响肯定是一大片啊,于是果断downgrade。自此之后,世界恢复平静,装包继续顺滑了。
2,这其实是个历史遗留问题,以前通过workaround的方法解决的,这次借着迁站的机会,必须要解掉。在第5步尝试ip访问站点时,还是出现了令人发指的500 internal error。在nginx配置文件中加入日志配置:access_log /root/sites/luoben/logs/nginx-access.log;  error_log /root/sites/luoben/logs/nginx-error.log;发现是stat() 我的wp站点目录时出现permission denied,首先把wp目录的owner改掉:chown -R www-data:www-data /root/sites/luoben,之后发现还是不行。搜索大法在这里再次显现威力,本文参考链接的第一条位置就留给了这个令人兴奋的答案,他一语道破天机:要在站点目录的每一级上加入x权限。照做之后,豁然天明。其实原因很简单,我的站点在/root/sites/luoben,root目录权限是drwx——,这样的话,只有owner才有进入这个目录的权限,目录的权限解释:http://superuser.com/questions/168578/why-a-folder-must-be-executable,r可以列举目录内容,w可以创建删除,x才可以进入并访问目录下的文件和子目录。

参考链接:

吐槽下阿里DNS,注册域名要慎重

我这个看起来还蛮diao的域名是从万网注册的,为了支持我司的生意,我用的也是阿里云的ECS服务器(青岛机房)。

拔特!他是国际域名,所以我的DNS解析到指向国内的阿里云服务器就出现了那个温馨的画面,告诉我阿里云给我挡掉了。

提了工单问了,国际域名指向国内服务器必须备案,但是炫酷的.xyz域名暂时不支持备案,死锁了。。。好吧,是我错了,我司网站已经提示了,急着注册这个炫酷的域名,根本没看提示好吗。

现在本网站寄生在了小伙伴的linode机器上,感谢承霖!