天天の記事簿

一個 蘿莉控 技術宅的世界

04/18
23:18

打包Git两个版本间所有变更的文件

emmmmmmm,博客长草半年了,期间也没写什么有深度的文章,真是惭愧惭愧。

于是今天呢,还是写篇没啥营养的文章…

 

起因呢,可以说一说。

公司没有成型的发布系统,现在项目的发布呢,新项目可以直接通过 Git 发布,很简单;我这个项目组的项目呢,有些(liang)年(nian)头(ban)了,发布还需要从 Git 拷贝文件到 SVN,然后通过生产环境的 Shell 发布,麻烦点;还有个更久远的项目,要靠找文件手动更新,很麻烦。

今天,又到了几周一次的迭代发布的时候了,公司小伙伴从修改的项目中,花了 X 分钟,捞出了修改的文件,我又花了 Y 分钟才把文件更新到生产环境…简直麻烦

然后想应该有个啥方法可以自动提取出全部的受变更的文件。

这不,找到了给记下来:

git archive -o patch.tar HEAD $(git diff --name-only --diff-filter=ACMRT HEAD^)
# 或者
git diff --name-only --diff-filter=ACMRT HEAD^ | xargs tar -rf patch.tar

是不是看到了熟悉的 git-diff?语法大概就是这样了。

 

参考:

https://git-scm.com/docs/git-diff-tree

https://git-scm.com/docs/git-archive

https://stackoverflow.com/questions/4541300/export-only-modified-and-added-files-with-folder-structure-in-git

12/1
20:53

Android出现[object Event]错误

前段时间在日志里发现了大量由 H5 上报的错误,里面清一色的错误内容是 [object Event]。因为上报的是 message 字符串,很好奇为什么会记录了 [object Event] 这样的内容。

同时发现,出现这个内容的全是 Android 的旧版本,从 4.1 到 4.4 都有分布,于是又针对性地谷歌了下,发现了这篇 issue。

大概是说这是 Android 4.1 – 4.4 WebView 实现的一个 Bug….

 

大概的解决方法有两个:

typeof message === "object" && message.toString() === "[object Event]"

1、使用 for ... in 循环将 message 的内容取出来进行上报

2、忽略

 

我们选择了忽略错误,从此日志里再也没出息过这个错误了- -。

 

参考:

https://stackoverflow.com/questions/22806305/window-onerror-and-object-event

https://stackoverflow.com/questions/27214534/js-object-event-error-on-android-in-getsentry

https://github.com/getsentry/raven-js/issues/360

11/30
00:09

说说SNI Proxy

想着有没有其他什么方法可以更好地反向代理国内无法访问的 Disqus,然后在 V2EX 上看到有人提到 SNI Proxy,于是就随便鼓捣了下。

嗯,本文没有任何关于 SNI Proxy 配置及详细使用的方法,如果您只是想了解配置方法,请移步其他博客。

 

SNI Proxy,顾名思义,SNI 代理,不懂 SNI 的请访问维基百科。它是一个适用于 HTTPS 和 HTTP 的类似于透明代理的反向代理工具。它可以在 TCP 层直接将流量在不解包的情况下转发出来,实现不需要在代理服务器配置证书就能反向代理 HTTPS 网站的功能,它还实现了 IPv4、IPv6 以及 Unix 套接字的监听。

 

开发者的本来目的,是想在一个无法访问外网的地方,自建一套 DNS,把允许访问的域名指向代理服务器,同时将网址配置在 SNI Proxy 的映射表中,达到可以访问某些白名单中的网站。

…是不是觉得这个功能有点熟悉?

对,这个工具到了中国人手中,就成为了访问不存在网站的跳板。只要在海外 VPS 搭建了 SNI Proxy 服务器,将不存在的网站域名 DNS 指向该 VPS IP,就可以正常访问了…

Read More →

11/27
23:38

解决PHPMailer无法发送邮件的问题

虽然自从 5 月份就没有更新博客了,但是中途还是让博客支持了 HTTPS,同时启用了 HTTP/2,只是没有强制启用。不过发现 Apache 2.4.27 以后就不再支持 perfork 模式下的 HTTP/2 了,就有段时间没有管了。

这不,宇宙最好的语言马上要推出 7.2.0 了,WordPress 也更新到 4.9 版本了,顺带解决上面的问题,于是更新了一波 Apache 和 PHP。

只是发现…为嘛我的邮件发不出去了…

 

不知道为什么,WP 内置的 PHPMailer 调用疼讯企业邮箱的 SMTP 就是无法发出邮件,总是提示 SMTP connect() failed.,让我一度以为服务器无法连接到 smtp.exmail.qq.com。然后经过 telnetping 发现连接是完全正常的,DNS 也能正常解析。

之后我开始怀疑是 DO block 了 SMTP 的连接,或者因为我的疼讯企业邮箱没有经过正常意义的实名认证,微信绑定,导致无法正常发送邮件。正在我打开了 DO 的 tickets,正要发个工单问情况,同时考虑着是不是要把域名邮箱迁移到 ZOHO 去时,我突然意识到好像还没打开 SMTP 的调试模式查看具体的失败原因,万一是我自己的问题呢…

我很庆幸打开调试看了看,不然就要被客服认为是煞笔了…

Read More →

06/21
22:53

SVN使用git-svn出现Using higher level of URL报错

公司版本控制还是使用 SVN,但是个人习惯使用 Git,于是使用 git-svn 替代 SVN。

但是在 git svn clone svn://xxxx 之后,竟然出现了 Permission denied,还有一坨 Perl 的报错。当时傻逼似的去狂搜和权限相关的解决方案,直到我看到了 Using higher level of URL: xxxxxx

恍然大悟,我只有 SVN 某个分支的权限,但是 git-svn 会非常“智能”地使用root 路径拉取整个 SVN 项目,于是需要添加 --no-minimize-url 参数阻止 git-svn 自动使用更高级的,你没有权限的路径。具体可以参考这篇提问

 

没了,是不是很水,我也是这么觉得的,这个博主真辣鸡。

05/22
00:27

博客评论系统从多说迁移至Disqus

多说前几个月就发了公告,表示 2017 年 6 月 1 日将关闭多说的评论功能。唉,不赚钱的项目是这样的啊…

虽说很早就想弃用多说转战 Disqus,但拖延症作怪,每次都懒得弄,这不多说大限将至,不得已只好着手将博客的评论系统从多说迁移至 Disqus。

 

经过一个下午的踩坑,终于将多说的评论导入到 Disqus。

转换工具可以使用我修改过的 PHP 脚本,放在了 Gist 上,感谢原作者 urouge

 

于是,理所当然地禁用了多说的插件,用上了 Disqus。

所以现在有这么几个问题:

1. disqus.com 在墙外,不爬墙是无法访问的,所以墙内用户需要用梯子才能正常使用评论

2. 以前用户的全部头像都丢失了,被替换为默认头像了

3. 用户的域名也没有了,所以点名字无法进行跳转了

4. 游客评论要经过审核,所以有条件的还是注册一个 Disqus 账号吧

 

这段时间的计划:

1. 使墙内用户可以正常使用评论

2. 全站启用 HTTPS,并使用 HSTS

3. 没想好

05/14
23:58

CentOS编译安装Apache启用HTTP/2

很好,我又开看似不需要的新坑了。

主要是想启用 HTTP/2 了,虽然现在还在使用 CentOS 6.X,但是有升级到 CentOS 7.X 的打算,所以写个博客记录一下。

 

阅读这篇文章前,有些东西需要知道一下:

1. 这次不会像之前的文章一样写得那么详细了,点到为止

2. 依旧没有“一键安装”脚本,因为懒

3. 小白用户或者没有支持 HTTP/2 计划的小伙伴请移步《编译安装LAMP:Apache篇》,但只支持 CentOS 6.XApache 2.4

3. 支持 CentOS 6.X & 7.XApache 2.4HTTP/2

4. 以后 OpenSSL 出漏洞要自己编译更新(Flag 已立)

5. 不涉及 HTTPS 配置,配置参阅《Apache开启HTTPS支持并绑定(泛域名)CA证书》一文

Read More →

04/27
23:26

解决Windows 8.1 Windows Update卡在正在检查更新的问题

Windows 10 已经面世一年多了,但是因为种种原因(懒得装环境),我依旧在使用 Windows 8.1。

Windows 8.1 的安全性相比于 Windows 10 来说,差了很多,所以打补丁是非常必要的,特别是方程式的日站框架解密之后,没打补丁的 Windows 8.1 更是面临重重挑战。

Windows Update

说来也奇怪,用同一个镜像装的系统,家里的台式机、笔记本都无限检查更新,而且就算笔记本带到杭州,还是无限检查更新,然而公司的电脑却一切正常…

我一度认为是网络问题,但是今天把笔记本带到公司,还是卡在正在检查更新…我的内心是崩溃的_(:3」∠)_

 

在打不了补丁的近半年内(对,就有这么久),我在大大小小的各个网站搜索解决方案,但是经过各种尝试,皆无果。然而,在我快要放弃的时候,我在一个网站发现了一个看似不靠谱的解决方案,但是经过我的测试,竟然成了!!

这里我就将我试过的方法提供给大家,大家可以本着死马当活马医的心态进行尝试。

Read More →

03/8
22:23

再次变更博客的分类和标签

写完博客要发布的时候要选择分类和标签,每次我的选择困难症都会犯。

看到这杂乱的分类,我要掀桌子了,不要拦我(╯°口°)╯(┴—┴

 

记得之前 14 年底改过一次分类和标签了,现在我又想改了。

果然还是一篇文章对应一个分类好么?真的么

改完以后搜索引擎抓的分类和标签都变了,很伤啊。谁让你要改

 

但是…

相信我,这是最后一次了,以后我一定好好做人。鬼才信

Read More →

03/8
22:02

出现connect ECONNREFUSED 127.0.0.1:3306报错的解决方法

最近用 Node 写一个小玩意,需要用到 MySQL 数据库,现在用得最广泛的是 mysql 这个库。然后呢,现在 ORM 这么火,干脆也上 ORM 吧,正好我也不会可以学习一下,于是找到了 Sequelize.js 这个 ORM 库。

 

看看 Sequelize 的文档,so easy,两分钟搞定~

import Sequelize from 'sequelize';
let sequelize = new Sequelize('database', 'username', 'password', {
    host: 'localhost',
    port: 3306,
    dialect: 'mysql',
    pool: {
        max: 5,
        min: 0,
        idle: 10000
    }
});
// ...后面还有一堆懒得贴了

运行一下

SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:3306

什么鬼,为什么会出现这个错误呢?我明明设置的是 localhost,为什么会变成 127.0.0.1

Read More →