Active Record Migrations中设置默认值的一个坑

所有的坑都来自于 无知 ,这次也不例外,我又掉坑里了…

先来看段代码:

def change
  add_column :servers, :vip_date, :date, :default => Date.today
end

这是一个很常见的迁移任务,新增一栏,设置默认值.执行迁移也毫无警告,看起来一切都那么美好.而真相其实是这样的:

假设今天是9月9日:

Server.new.vip_date  #=> Sun, 09 Sep 2013

嗯,看起来很完美.可过了一天你再试试?

Server.new.vip_date  #=> Sun, 09 Sep 2013

见鬼,怎么还是相同的日期?难道Date.today秀逗了?

表象可能有很多种,而真相只有一个:

Active Record Migrations 并不支持 动态默认值,你应该在回调中处理,比如after_initialize.

曝光个挂黑链的插件:wmff_加入的群组

有用户反应 Discuz! X2.5 最近出现间歇性数据库报错:

解决进入云平台时提示'对服务器的请求已遭到某个扩展程序的阻止'的问题

检查浏览器拓展中是否有屏蔽广告的程序,比如 ABP ,去掉’对该网站使用过滤’“的勾即可.

解决通过 SSH 登陆后很多命令报'command not found'的问题

以前就遇到过这个问题,没深究,今天又碰到了,决定彻底解决掉.

症状:

服务器上的 Ruby 是通过 rvm 安装的,登陆到服务器上执行正常,但跑部署脚本( Ruby ,并非是 Shell )就提示找不到命令. 翻 SSH 的手册看到一句话:

If command is specified, it is executed on the remote host instead of a login shell.

这说明 SSH 获得的 Shell 和 login 获得的 Shell 是有区别的,也就是根本不会载入 bashrc .而 rvm 是依赖 bashrc 的,因此也不会启动.

查看 env | grep rvm 远程和本地返回了截然不同的结果:远程缺少和 rvm 相关的路径,这解释了为什么找不到命令.

解决:

env | grep rvm > ~/.ssh/environment
PermitUserEnvironment yes >> /etc/ssh/sshd_conf
service ssh restart

记一次反入侵( Discuz! X2.5 )

这是最近发生的一个比较典型的案例,记录下来供大家参考. 该网站 Alexa 世界排名在 50K 左右,日均 PV 300K+ ,主要采用 Discuz! X2.5,订制了插件.

第一次发现入侵是因为下午我收到服务器监控报警,平常这个时候不是访问高峰,服务器过载不太正常,引起我怀疑.经过检查发现有人拿到了 Web 权限,挂了黑链,由于代码有问题,造成 PHP 进程宕死,最终触发了警报. 将黑链及后门清理干净,记录下了入侵发生时间: 4 月 20 日(几天前).由于 Discuz! 在 25 日爆出安全漏洞,我之前处理了很多 Discuz! 被入侵的事件,因此怀疑是不是这个 zero day .服务器上的日志没有记录到太有价值的信息,无法还原攻击过程,这给修复漏洞带来了麻烦.起初把目光聚集到该站订制的插件上.经过检查,并未发现问题.看来只好请君入瓮,在服务器上做了必要的布置,开启了更多的日志和入侵检测,静待猎物上门.

第二次对方再次光顾服务器,这次及时发现.相关日志整整 3G+ ,经过筛选,过滤掉 4000K+ 条的日志.狐狸露出了尾巴,问题出在 FastCgi 的类型解析漏洞.触发这个漏洞需要满足的条件其实挺多的:

  1. 不能启用远程附件.附件服务器一般都没有脚本执行权限.
  2. 在 PHP.ini 中不能设置 cgi.fix_pathinfo ,否则会覆盖关键变量.
  3. 必须是 Web Server + FastCgi 的架构. 恰巧都满足.

找到漏洞后修复就简单了,上面三点任意改掉一点就可以.

坑爹的雷蛇与火星元素数码专营店

购物体验:

最近换键鼠,亚马逊无货.于是跑到雷蛇官网,在渠道商界面引导到淘宝的一家天猫店:火星元素数码专营店.以为天猫要靠谱些,实践证明:还是 too young too simple 了.

可怜我的 Cherry 键盘,托了 EMS 的福,后盖摔的七零八落暂且不表,单说那鼠标,第二天就坏了( 确切的说是到达时损坏,根本未使用 ).淘宝的

7 天无理由退货

果然给力,你拆了包装?对不起,影响二次销售,可不属于受理范围.找售后吧,售后说给你质保,维修.有意思不?我亲自打电话到雷蛇授权店确认是__七天内换新__.我表示接受不了买了个返修品,要求退款,更有意思的事来了.你可以在售后申请退款,但商家可以__拒绝.纠纷发生 3 天后才能有淘宝客服介入, 7 天内不解决直接关闭维权入口.后来商家妥协说给__换新,发来一看好么,包装拆开了,明显跟第一次发来的货成色不一样,脚贴有诸多划痕.打电话到雷蛇查询是否是__返修品__雷蛇表示他们也不知道.客服告诉我以质保点的处理结果为准,质保点说有任何问题都可以向官方求证.两边皮球 T 的你这个没脾气.本以为忍一忍事情就到此结束了,谁知道只是个开端.

3 个月时间,换了 3 个返修品.诸如莫名其妙失灵,中键变双击,指针飘移,各种故障不一而足.最后不得不丢掉.

使用感受:

先说优点:

  • 外包装设计很帅,黑绿相间却也非常协调( 官网同样黑绿却很山寨 ).很多人戏称雷蛇为”灯厂”,鼠标绿色的呼吸灯也很抢眼.
  • 关闭了鼠标垫校准后鼠标定位精确,移动顺滑( 雷蛇的重装甲虫控制版鼠标垫 ).
  • 超高 DPI ,可达 6400,可惜我用不上.
  • 鼠标线很长,并且是编织线的那种,应该比较耐用.
  • 仿肤材质摸起来比较舒服.
  • 配合云驱动键位可以自定义,支持多种平台.

再说缺点:

  • 做工粗糙,有毛刺.听售后电话的意思返修率也不低.而且出了问题要更换的话邮费都是买家付,连 AA 都没.
  • 鼠标本身较大,不太适合亚洲人手型.用起来手腕疼
  • 由于雷蛇没有在国内放置服务器,导致 Mac 版云驱同步经常失败,配置丢失. DPI 随性变,呼吸灯更是让你觉得它随时会乘鹤西去.
  • 时不时丢帧,无规律,想玩游戏的话不要考虑这款鼠标,地狱狂蛇表现都比它稳一些.也许是 Mac 版驱动的问题.
  • 易脏,难以清洗.更难洗的是它的鼠标垫.

总的来说,鼠标本身个人感觉一般,要是算上售后服务,评级为’垃圾’并不为过.取消鼠标内置闪存无法保存配置是其一大败笔.

解决 Discuz! 提示数据库无法连接的问题

前几天服务商维护 SQL 数据库升级了 SSD ,后来发现论坛时不时提示

Discuz! Database Error (2005)not connect

额滴个神呐.那个 2005 错误号代表啥意思?

手动登陆服务器连接下数据库,无任何错误.看来得耐心等待它出错.

皇天不负有心人,终于让我逮到了…

ERROR 2005 (HY000): Unknown MySQL server host ‘oo.xx’ (2)

原来那个错误号是 SQL 的…

“找不到主机”的话问题就简单了,编辑下DNS文件 /etc/resolv.conf 把公共 DNS 添加进去,再连接试试.

Welcome to the MySQL monitor. Commands end with ; or \g.

联系下主机商让他们检查检查内置的 DNS ,至此问题得到解决…

请立即屏蔽不受信任的根证书

这个事情虽然早就知道,但一直迟迟没动手,因为没有碰到攻击. 不过实践证明我把某些机构的人想的太单纯了,狗改不了吃屎.攻击持续的时间很短,现在已经很难复现了.

解决 vsftpd 修改设置却不生效的问题

症状:

已经重启了服务,但是配置仍然不生效.后来终于发现是 FileZilla Client 在搞鬼.

原因:

即使你手动断开, FileZilla Client 仍然在后台保留了一个链接,这导致 vsftpd 无法平滑重启,一直在等待.

解决:

彻底关闭 FileZilla Client 或者杀掉 vsftpd 进程.

解决 Google Earth 被墙奸的问题

临时方案:

编辑 hosts 文件: 203.208.45.196 kh.google.com

稳定方案:

购买一个靠谱的梯子,智商税该交就得交.