• 需要子类实现的话,应该是protected吧

    class A
        protected
         def  priv_a
                 3
         end
    end
    
    class B   < A
        def priv_a
              5
        end
    end
    

    要实现类似JAVA之类的private,可以看下这个

    https://stackoverflow.com/questions/1565269/are-there-good-reasons-for-private-to-work-the-way-it-does-in-ruby/1565640#1565640

  • 源码有注释,开头和结尾必须都是数字才返回size

    Both the begin and the end of the Range must be Numeric, otherwise nil is returned.

    # rng.size                   -> num
    # 
    # Returns the number of elements in the range. Both the begin and the end of
    # the Range must be Numeric, otherwise nil is returned.
    # 
    #   (10..20).size    #=> 11
    #   ('a'..'z').size  #=> nil
    #   (-Float::INFINITY..Float::INFINITY).size #=> Infinity
    def size()
        #This is a stub, used for indexing
    end
    
  • 终于把cell gem删除了

    为了尽量少改动代码,扩展render partial来实现了类似的接口

    1. 添加一个helper

    # app/helpers/cell_helper.rb
    
    module CellHelper
      def cell(cell_name, options = {})
        cell_class = class_from_cell_name(cell_name)
        cell_class.new(self, options)
      end
    
      private
    
      def class_from_cell_name(name)
        "#{name}_cell".camelize.constantize
      end
    end
    

    2. 添加一个cell的base类

    # app/cells/cell_base.rb
    
    class CellBase
      attr_reader :context
    
      def initialize(context, options = {})
        @context = context
        @options = options
      end
    
      def call(method_name, options = {})
        send(method_name, options)
      end
    
      protected
    
      def render(options = {})
        locals = options.fetch(:locals, {})
        locals = locals.merge(cell: self)
        called_method_name = caller_locations(1, 1)[0].label
    
        context.render(
          partial: template_file_path(called_method_name, options),
          locals: locals
        )
      end
    
      def template_file_path(method_name, options)
        file_name = options[:file].present? ? options[:file] : method_name
    
        folder = self.class.to_s.underscore[0..-6]
        "#{folder}/#{file_name}"
      end
    end
    

    3. 让所有的cell类都继承CellBase

    class SampleCell < CellBase
    end
    

    4. 把xxx.erb文件改成_xxx.html.erb文件(partial file)

  • 如何给 Rails 做 health check at 2018年11月12日

    我们目前也使用AWS

    scaling 使用的是Auto Scaling,当CPU或者内存超过一定量的时候,就自动启动新的EC2 Instance

    health check 用的NewRelic Infrastructure来监视nginx,unicorn等进程,发现异常后发送到slack

    如果只是一时的大量请求,仅仅扩展web server就可以解决的话,用Auto Scaling应该可以解决问题

    AWS的health check没实际用过,看了下文档,好像支持任意的command,可以换成监视pumma的进程挂没挂 https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_HealthCheck.html

  • 顶级作用域中定义的方法会成为Object的private方法,和下面的定义一样

    class Object
      private
    
      def meet
        puts in main
      end
    end
    

    几乎所有对象,类都继承于Object,所以他们也间接的拥有了私有方法 meet

    #                            +---------+             +-...
    #                            |         |             |
    #            BasicObject-----|-->(BasicObject)-------|-...
    #                ^           |         ^             |
    #                |           |         |             |
    #             Object---------|----->(Object)---------|-...
    #                ^           |         ^             |
    #                |           |         |             |
    #                +-------+   |         +--------+    |
    #                |       |   |         |        |    |
    #                |    Module-|---------|--->(Module)-|-...
    #                |       ^   |         |        ^    |
    #                |       |   |         |        |    |
    #                |     Class-|---------|---->(Class)-|-...
    #                |       ^   |         |        ^    |
    #                |       +---+         |        +----+
    #                |                     |
    #   obj--->OtherClass---------->(OtherClass)-----------...
    

    源文件中定义也是一样的,我是这样测试的

    1. 写个test.rb文件

    def meet
      puts '213'
    end
    
    meet
    
    obj = Object.new
    obj.meet
    

    2. 执行以后可以发现一般的对象也拥有了meet私有方法

    $ ruby test.rb
    213
    test.rb:8:in `<main>': private method `meet' called for #<Object:0x007fda1107c4f0> (NoMethodError)
    
  • @easy_install 有参考Ruby程序员修炼之道,实际开发中我用的最多的是4和5,其他的感觉风险有点高,很少用到

  • Ruby China 7 岁生日快乐 at 2018年10月31日

    🎁 🎁 🎁 🎉 🎉 🎉 🎉

  • google analytics或者
    td-agent + google bigquery自己定义字段来统计

  • 感觉好像广告

  • 用 Docker 构建开发环境 at 2018年10月16日

    @ad583255925 @yukihiro_matz
    目前项目用的是AWS ECS + CircleCI来部署,负载均衡是ELB

2008年毕业后,就业于日本IT公司 用C#语言进行了5年开发 现在主要使用rails框架进行网站开发(3年)

熟悉的语言和工具等 ruby rails javascript AngularJS ReactJS linux AWS unicorn nginx mysql redis elasticSearch GoogleBigQuery