Elasticquent 的两个bug

Elasticquent 是与 Larave Model Eloquent 结合的 Elasticsearch 客户端,它可以轻松的将 Eloquent 中定义好的数据和关系映射并同步到 Elasticsearch 中。


2016-05-29 Laravel, Elasticsearch

Laravel 取出所有的 router 信息列表

在做后台权限系统的时候需要将所有在框架中注册的 Router Names 同步到数据库中以便后台配置权限,可以使用 Laravel 中全局变量 $app 中获取到相关信息:

global $app;

//Illuminate\Routing\Router Object
$routers = $app['router'];

//Illuminate\Routing\RouteCollection Object
$router_collection = $routers->getRoutes();

取出 Route Collection 后就可以遍历取出 Illuminate Routing Route 对象,读出需要的信息。比如:

$router->domain();
$router->getName();

具体可以参考 API 文档:https://laravel.com/api/5.2/Illuminate/Routing/Route.html


2016-01-31 Laravel, Web

迎面可以碰到几辆车

2014 年的最后一天,写个小问题,没有答案。

A, B 两地,A 开往 B 的列车每整点发车,10 小时到达;B 开往 A 的列车,每半点发车,12 小时到达。那么问题来了,A 出发的列车到达 B 时迎面会遇到多少辆从 B 驶向 A 的列车。 限时 3 分钟。


2014-12-31 puzzle

利用 MySQL 的计算函数 TRUNCATE 对以某单位分段的区间中的每个区间做数据统计

TRUNCATE 方法

Returns the number X, truncated to D decimal places. If D is 0, the result has no decimal point or fractional part. D can be negative to cause D digits left of the decimal point of the value X to become zero.

http://dev.mysql.com/doc/refman/4.1/en/mathematical-functions.html#function_truncate


2014-08-01 SQL

Chrome 的预连接机制是如何破坏 Haproxy HTTP 请求的

最近使用 Chrom 访问生产环境经常得到 408 错误,经查这样的请求都没有到 nginx, 只请求到了 Haproxy。Google 后找到原因:

chrome 有一个预连接页面中 server 以加速浏览的特性。就是加载页面后对页面里链接中的 server 建立一个 tcp 连接(但不真正发出请求),在用户真正发起请求前完成 TCP 握手,这样就可省掉了另一个往返的延迟,大大提高访问速度。通过访问 chrome://dns 可以看到 TCP 预连接的使用情况。

haproxy 在 socket 建立了之后严格按照调置和 http 协议中的约定,当 sockets 建立之后等待一定时间,没有 http 请求上来就会产生一个 408 错误,这时真正的 http 请求通过这个 socket 上来时就会直接收到 haproxy 发出的这个错误.

将 408 错误重定向到 /dev/null 后,haproxy 将不再对 408 错误做出提示,也就是出现 408 之后不返回错误给 client 而是直接关闭 socket。这时当使用 chrome 真正请求资源时,chrome 的预连接已经被关闭,chrome 只能重新发起一个全新的 tcp 完成一次 http 请求,暂避免这个现象。这是一个变通的解决办法。

Chrome 的这个机制 3 年前就有了,为什么最近各 LB 突然出现这个问题,文章中没有给出原因。

http://www.technize.net/chrome-extra-bandwidth/ 给出了关闭 chrome 预连接的方法

详细:http://www.copernica.com/en/blog/how-chromes-pre-connect-breaks-haproxy-and-http

参考:http://www.nowamagic.net/academy/detail/48110864


2014-06-27 Chrome, haproxy, HTTP

Rails 的单表继承

Rails 内置了非常棒的单表继承 (Single Table Inheritance, STI) 机制。

单表继承

单表继承就是面向对象的继承关系在关系型数据库中的一种表现方法。当数据库中的表映射到代码中的类时 (ORM),代码中的继承关系的不同类可以保存在同一张数据表中。约定的特定中列的内容可以指示出这条记录属于哪个具体继承的类,在 Rails 中,这个列的名字是 type。

如何在 Rails 中实现单表继承

class Company < ActiveRecord::Base; end
class Firm < Company; end
class Client < Company; end
class PriorityClient < Client; end

很直观,当用上面的类创建数据时, companies 表中的 type 会设置成相应的类名。如果没有 type 列,单表继承不会触发,只是写一条普通并区分不开的记录到 companies 表中。


2014-04-07 Rails, Web