• Newrelic 监测数据的解释 at 2014年11月25日

    newrelic 计算 external service 调用是通过检测 Net::Http 的代码调用,如果你调用另外一个 api,不是通过 net http(比如说是 socket),是不会统计在 external 里面的。

    你可以在本地环境模拟,或者加一下日志,看代码执行到底耗费在哪里。

  • Newrelic 监测数据的解释 at 2014年11月25日

    对Grape不了解呢,是不是将这个api里面执行ruby代码的时间都算到了Rack::ContentLength#call里面?

  • 翻译好赞!! 猜测性能的提升 node.js http parser 要占比较大的因素,unicorn 应该也可以用这个 parser。 另外,在实际项目中 app server 耗时在整个应用里面占很少的比重,提升效果有限。

  • #29 楼 @anklos 这个需求可以通过 action filter 来解决 newrelic_ignore :only => [:check]

  • #10 楼 @dddd1919 不需要额外设置,你 padrino 也用的 activerecord 吗?database 应该识别到的。Ruby VM GC 时间也应该是直接识别到的。

  • #22 楼 @anklos health check 一般频率不高(比如 1 分钟一次),没办法,而且也没必要剔除吧。

    #21 楼 @sjzg001 Apdex score < 0.7,一般是某些页面加载太慢了,比如图片资源加载影响到了整个页面加载速度,你可以点击看详情

  • 晚上访问的时候,页面出来有点慢,F12 看了一下,css/js 等文件没有 gzip?

  • PostgreSQL 与 MySQL 的性能 at 2014年10月29日

    表结构一般都是为了 OLTP 优化设计的,千万级别的数据,如果查询无法有效利用索引,或者需要 scan row 数量过大,PostgreSQL 和 MySQL 都无法提供很好的性能。用 OLAP 吧。

  • 拒绝自己拼凑查询条件 at 2014年10月28日

    有成熟的 gem 可以用:

    https://github.com/activerecord-hackery/ransack

  • 昨天在北京遇到了@Kgen 真人,才发现是壕...

  • 是俄罗斯方块游戏的延伸吧?给你固定的积木条,去填充棋盘,唯一不同的是 Tetris 是用 4 块积木组成的积木条,而你这个问题是用 5 块积木。

  • 还好,我们的招聘启事中枪比较少...

  • #14 楼 @dddd1919 IM 对 jpeg 格式做的不是无损转化,所有的操作,哪怕只是去除掉 exif,也会重做一次压缩,IM 用的量化表和生成该文件的软件不一样,就会出现质量的改变。

  • imagemagick 对 jpeg 格式所有操作都是会重新压缩的,如果照片本身带的 meta 信息很少或者没有,然后照片本身用的压缩表和 imagemagick 不一样(比如是相机和手机拍摄),是有可能会导致 strip 以后的尺寸会稍微变大。

    以前遇到过这个问题,用这个照片为例子,strip 以前是 458365

    strip 以后,变成了 468814,反而变大了 10K 左右

    肉眼看不出来有什么区别,但是如果你生成 2 者的区别图 compare 3347.jpg 3347-strip.jpg diff.jpg

    会发现边缘是有差异的

  • 按照你的写法会输出 Access denied for user 'xxx'@'localhost' (using password: YES) 说明已经捕捉到错误了

  • 你原先的写法没问题啊,你说的不能捕获到异常是指什么?

  • 我一般去这里查: http://rubydocs.org/

    还可以下载和 Rails 的文档打包下载一个离线版本,在本地查询很快的。

  • 我在之前的项目中对比过直接使用 nginx 做静态缓存和 nginx + varnish,后者没有任何优势(速度,内存,架构简洁),有兴趣的话,你们可以对比测试一下。

  • 另外如果是你提到监控 CDN 节点的需求,我以前的写过代码是扩展一个 resolv, 能够自定义域名的解析,这样会灵活很多,也是参考了 ruby 本身的代码 lib/resolv-replace.rb,这样就不需要强制设置 Host 和 IP,代码也会简洁很多。

  • 这个是 SNI 的原因,net/http.rb 的代码里面有这样一段,会将你传入 url 里面的 ip 设置为 hostname:

    # Server Name Indication (SNI) RFC 3546
    s.hostname = @address if s.respond_to? :hostname=
    

    然后你后续请求的 host 又是通过 header 改变的,一些 web 服务器可能会认为是非法请求,返回了 400 的状态码。 SNI 是在 ruby 2.0 以后加入的,你可以将这行代码去掉试试看,来验证一下是不是 SNI 的问题。

  • #29 楼 @emanon 嗯,后来看文件明白了,已经在淘宝下单,准备 DIY 一个了

  • #24 楼 @hisea 左右键盘上的 2 个音频接口是做什么用的?

  • 在这里讨论习题可以吗? one line 风格: 第一题

    def avg array
      array.size > 0 ? array.reduce(:+).to_f / array.size : 0
    end
    

    第二题没看懂题目,汗一个... 3 个数组的测试用例没看明白,和我理解的题目不一样,求更多的测试用例,比如说 3 * 5 这样的矩阵

    第三题

    class Numeric
      def method_missing method, *args, &block
        if i = [:g, :kg, :t].index(method) then self * 1000**i else super end
      end
    end
    

    第四题

    def parse string
      string.gsub(/\#\{(.*?)\}/){eval $1}
    end
    

    第五题 明显不能用一行解决,我匿了...

  • #43 楼 @gene_wu 16 号有其他安排了,无法过去,不好意思

  • slim 默认将所有模板中的空格都去掉了,你可以通过设置来关闭这个选项: Slim::Engine.set_default_options pretty: true 或者是修改 span 的 css,添加 margin

  • Install Ruby The "Postmodern" Way at 2014年07月10日

    #26 楼 @hooopo 看 RVM 文档: http://rvm.io/integration/cron 如果你懒的看文档,遇到问题了,google 一下就有了,我并不觉得这是坑

  • Install Ruby The "Postmodern" Way at 2014年07月10日

    #26 楼 @hooopo 看 RVM 文档: http://rvm.io/integration/cron 如果你懒的看文档,遇到问题了,google 一下就有了,我并不觉得这是坑

  • Install Ruby The "Postmodern" Way at 2014年07月09日

    在服务器上用了 N 年 RVM 了,没发现什么问题,优点:

    1. 安装方便,一个裸系统,执行一个命令就搞定了,包括安装编译相关的包也一并搞定
    2. 升级 ruby 版本或者回滚也很方便,一个命令搞定,而且旧有的 gem 还可以直接迁移
    3. 打补丁方便,也是一个命令搞定,集成了常用的补丁

    唯一缺点: cron / upstart 等运行 ruby 相关脚本时,需要在脚本添加 source rvm 的 enviroment 文件: source /home/xxx/.rvm/environments/ruby-xxx 或者用 wrappers 执行,包括升级版本以后,也要修改这个脚本的 xxx 匹配到最新版本,不过话说回来,就执行一下 sed 搞定的事情,也没有太麻烦,和优点相比,完全可以忽略

  • 如果规则简单,可以做一个 web 界面,只接受 service 名字和 ip,然后动态修改 nginx 的配置文件,发送 HUP 信号,让 nginx 无缝重启,我以前往 upstream 里面添加或者减少 ip,实现 auto scale up/down就是这样来做的

  • sidekiq jobs 里的竞态问题 at 2014年07月04日

    #5 楼 @hz_qiuyuanxin 用 uid 作为 queue name Sidekiq::Queue['queue_name_' + uid].limit = 1