• 本身的重启是使用unicorn 的USR2信号进行无缝重启的,唯一的问题是等待时间。要排查这个问题,你需要了解unicorn无缝重启的过程。

  • macOS 安装 Ruby 报错 at 2018年11月07日

    please read /Users/shan/.rvm/log/1540623603_ruby-2.5.1/configure.log

    这个日志你可以分析下

  • Ruby 的好朋友 -- jemalloc at 2018年11月05日

    我这个帖子里提到了M_ARENA_MAX默认值的变化(从2到 2 * CPU核数),有人怀疑是red hat为了讨好大用户(通常拥有足够的配置)所以用空间换性能。最后页面下方sidekiq作者和Sam(一开始jemalloc)的倡导者也都达成了一致,认为malloc和jemalloc的区别的原因是他们默认参数的不同。换句话说malloc如果设置了M_ARENA_MAX = 2也可以达到jemalloc的评测性能。因此两者并没有所谓的性能上的明显区别。

    持谨慎态度的人并不仅仅是认为jemalloc会带来问题,而是如果不能证明jemalloc确实更适合ruby,那么就没必要作为默认选项(本帖的讨论内容)。毕竟这不是一个小的改动。

  • Ruby 的好朋友 -- jemalloc at 2018年11月04日

    https://bugs.ruby-lang.org/issues/14718 在这个里由后续。结论是malloc的问题是在glibc在某个版本开始某个默认参数发生了变化,如果调回去就跟jemalloc差不多了。而jemalloc不同版本表现也不尽相同,无非是时间和空间的取舍。最后大家一致认为最佳解决方案是调整malloc的那个参数,因为对于ruby的场景更为适合。

  • break if str[v+=1] != 3
    

    不是可以吗

  • [上海] 已关闭 at 2018年10月12日

    sass?saas?写错了?

  • 新出现的东西没看出来哪个解决了Rails没有解决或者解决的不足的问题。至于react,vue,前后端分离,这些跟rails又不矛盾。

  • 目的不太一样。Model里能做更复杂的验证,有友好的报错。数据库是为了在守住关键底线,限制功能要弱一些。

    如果你这个字段,不存在并发访问等绕过Model的情况,你可以不做数据库层面限制。

  • 方法调用,还有lambda, proc等,在Ruby里是不一样的东西。至于为什么这样设定,这是作者是这样想的。对我个人来说,没有什么好与不好。如果与JS等语言比,方法、函数、lamba其实就是一个东西,确实是更一致,但是JS也有JS不一致的地方。

    实际上,Ruby因为有block的存在,很多时候并不像是JS一样,是函数传来传去的,它是传block。以你的例子(我帮你格式化了,不知道是不是你本身的意图)

    tt = ->(fn, arg) {
      fn.call(fn.call(arg))
    }
    
    aa = ->(arg) {
      arg << '!'
    }
    
    tt.call(aa, 'ok')
    

    首先在Ruby里我们可能不太会去定义高阶函数,而会去使用一个私有方法。在我接受高阶函数的概念后,我也尝试在JS, Scala里用高阶函数来封装局部逻辑,但是事实证明是这带来了代码可维护性的降低。因为本身这种需要局部高阶函数的函数,逻辑就很复杂,这时候使用高阶函数,相对于另一个私有方法,本身就在增加复杂函数的长度。

    如果我把你的tt当成是一个方法,而不是一个高阶函数,那可以这样写:

    def tt(arg)
      yield(yield(arg)) # 这里我不清楚你的意图,一般应该不会这样做,我只是复制你的逻辑
    end
    
    tt('ok', &block) # block是这个调用tt的方法的一个block参数
    

    是不是相对你的版本好看一些?

    JS里的

    var hide = function() {
      // ...
    }
    

    本来在Ruby里,我们就会用一个方法来代替的,所以就基本不存在你说的连环a_lambda.call()的调用。

  • Ruby 3.0现在动向如何?有什么进展?对于实现3x3,目前采取了哪些优化方案?