Nginx在Windows上莫名的60秒延时问题

Nginx + Node.js是个不错的搭配,多个高效站点由Nginx统一出口。今天在调试时发现使用有连接超时设置的Android App连接站点时,会随机性的发生超时,同时Nginx的log会出现499错误,这是因为Android App由于超时断开了连接,所以根源还是Nginx超时。用Chrome查看连接,只要发生延时,就是60秒,而且随机发生,但直接访问站点就没有这样的问题。过程中调整了proxy_ignore_client_abort, keepalive_timeout等参数,都没有达到目的,最后还是看了老外的帖子才悟到方案。 阅读全文 “Nginx在Windows上莫名的60秒延时问题”

SAE MySQL 再次遭遇问题 Lost connection to MySQL server

经过上次MySQL主从分离参数问题后,今天又突遇问题,使用查询的语句会报出如下错误,sae Lost connection to MySQL server at 'reading initial communication packet', system error: 111 。经过检查,此时单笔数据插入是没问题的。从问题表面来看,似乎是MySQL 找不到了,但如果这样的话,插入也应该出错才对。同样,继续翻SAE的代码,发现SAE在处理请求时,针对读写是有区分对待的,当执行runSql时,指向写库,当执行getData时,如果开启了主从分离,则指向读库,否则指向写库。看来目前的状况是读库发生了问题,而写库没问题。 阅读全文 “SAE MySQL 再次遭遇问题 Lost connection to MySQL server”

SAE MySQL 遇到的 read-only option 问题

由于之前上线的应用数据达到了一定规模,重复数据对效率造成影响,导致SAE无法正常执行。于是赶紧补齐数据库整理的code,但在最后上线执行时,竟然报出了The MySQL server is running with the --read-only option so it cannot execute this statement 这样的错误。没Google到结果,于是去SAE BBS翻了翻,有人说是主从数据库的问题,应该是这个原因,但奇怪的是单笔写入没问题,批量删除有问题。 阅读全文 “SAE MySQL 遇到的 read-only option 问题”

搭建GAE PHP Runtime环境的经验 与 问题解决(PIL, HTTP500, GAE_INCLUDE_REQUIRE_GS_STREAMS)

迫于GFW的淫威,很久没有跟进GAE的更新了,最近偶然发现GAE开始支持PHP,之前的愿望终于被Google实现,知识库又需要尽快更新了。当然,旧有的愿望被实现了,还要有新的追求,那就是Node.js,Google,哥等你。
虽然Java相较于PHP可以实现出很强大的功能,但毕竟作为脚本语言的PHP,其灵活性、便捷性仍然在散发着耀眼的光芒,所以GAE.PHP也必须拿下。
阅读全文 “搭建GAE PHP Runtime环境的经验 与 问题解决(PIL, HTTP500, GAE_INCLUDE_REQUIRE_GS_STREAMS)”

解决向Linux主机上传代码后文件大小变化的问题

最近为了解决网站备案问题,新买了一个香港主机,速度比想象的要好,稳定性还需要长期观察,价钱非常满意,这些会在别的博文提到,这里要说一下,新主机是Linux系统,而Magic哥还没正式用过Linux主机,Godaddy也因为刚上线时需要换IP把Linux主机换成Windows了。其实对于PHP开发来说,只要注意大小写问题,应该没什么障碍,事实也确实如此,但有一点比较让人蛋疼,文件上传到主机后,文件大小会发生改变,带来的后果是无法进行差异比对,只能通过文件的修改时间猜测新版代码是否放到主机上了。 阅读全文 “解决向Linux主机上传代码后文件大小变化的问题”

网站被主机商的 关键词过滤系统 挡住的解决办法,站长秘籍 之 万恶的关键词

如果你的网站有留言功能,你是否遇到过网页只显示“您浏览的页面或提交的数据包含敏感关键词信息,该关键词已经被过滤”的问题。Magic哥曾经遇到过一次,因为垃圾留言里有诸如手机监听之类的坏词,导致无法进入后台的留言管理界面,结果是用代码操作数据库解决的。最近又遇到一次,所需浏览的网页是Magic哥管理网站用的,可以展示搜索引擎接入时的关键词,结果又杯具了,网页一直显示上面写的那句话,值当的吗?我们又不是专门做坏网站的。这回决定解决一下,方法如下。
阅读全文 “网站被主机商的 关键词过滤系统 挡住的解决办法,站长秘籍 之 万恶的关键词”

禁止Windows7中关于扫描并修复磁盘、分区的提示

使用Windows7后有一个很大的不爽,每次插入U盘时都会提示”要扫描并修复xxx吗?”,选择不修复的话以后还会提醒,选择修复会告诉你无法修复,以后还是会提示,&#¥%,沃勒个去的,这不是找乐嘛。更可气的是我用了一个软件,会在登录电脑时把文件映射成分区,结果每次开机就会看到这讨厌的提示。曾经Google过,说是把ShellHWDetection服务禁止就可以了,结论是不管用! 阅读全文 “禁止Windows7中关于扫描并修复磁盘、分区的提示”

介绍几个你一定要知道的GAE基本服务

FetchUrl
由于Google重写了 java.net.URLConnection,所以对于Fetch Url操作不用显式的调用GAE的URLFetchService。需要说明的是,在使用GAE的fetch url时,发起请求的IP是不固定的,即你连续访问一个url时,这个url的host会拿到不同的client IP,当然有时也能碰到一样的,在某些场景下这非常有用。此外,当GAE发出HTTP请求时,会在Header的Agent字串里添加GAE的特征串,似乎这是不能避免的,有些另类网站会用Agent串与密码一同加密作为自动登录信息,此时就要小心了。 阅读全文 “介绍几个你一定要知道的GAE基本服务”

GAE中的主要概念

请求时长(Request Timer)
Request请求需要限制在30秒内完成,否则将会触发com.google.apphosting.api.DeadlineExceededException异常,如果servlet没有处理该异常,浏览器将会看见HTTP 500错误。当该异常被触发时,运行环境会留出小于1秒的时间让你自行处理。

沙箱的限制(Sandbox)
不允许向文件系统写入;只能通过http/https与远程服务器建立网络连接;不允许创建线程;不允许进行进行其他类型的系统调用;只能使用白名单中的Java库。

定期维护(Scheduled Maintenance)
在定期维护时,数据库文件处于只读状态,此时任何写入操作将会引发com.google.apphosting.api.ApiProxy.CapabilityDisabledException异常,此时Session操作也自然会被牵连。同时缓存(Memcache)也无法正常使用,所以在操作Memcache时需要捕获com.google.appengine.api.memcache.MemcacheServiceException异常。

实验
修改代码编译后,可能无法体现新的修改,尽管war目录的内容都是新的,此时可以通过修改appengine-web.xml中的version来解决问题,不过从1.3.6以后就没有遇到过这样的问题了。
WEB-INF目录中的appengine-web.xml和web.xml均是部署必需的,其中appengine-web.xml配置了你的AppSpot站点信息,非常重要。
编译环境中不要引用Tomcat的lib,因为GAE复写了一些javax的API,可能会因冲突造成未知的结果。