• 多看道德经,身心放松,身体自然好

  • 关于 URL 规范 at 2019年01月11日

    我觉的都没毛病,关键看API是给谁用的,API使用者觉的方便好用不

    REST的好处是熟悉REST的开发者对于类似的API上手快一些

    还有API的整体设计统一也很重要

    比如取得一个动物园的所有动物

    可以这样

    animals?zoos_id=:id

    这个时候获取一个动物详情,animal/:id 相对比较自然

    也可以这样

    /zoos/:id/animals

    这个时候获取一个动物详情,/zoos/:id/animals/:id 相对比较自然

  • react and rails 最佳实践? at 2018年12月18日
  • @wppurking

    那现在核心是 "让一人负责基础设施" 的部署, 小团队没有问题, 再大一点的团队可能会有基础设施的构建权限或者基础设施的变化的问题.

    多谢回复。

    是的,目前不到10个人,IAM权限没有分那么细,实际进行terraform plan限制成2个人来减少误操作。

    从安全问题考虑的话,我觉的主要是在IAM对开发人员的权限进行分配。

    比如一般的人员只可以执行获取resource的操作,无法删除,更改之类的

    这样一般开发人员即使terraform destroy,并且输入yes以后,也不会被拉出去祭天。。

    当然相应的开发就没那么方便了,如何取舍取决于你目前的团队

  • @wppurking

    Terraform Collaboration for Everyone 目前还没用过,还没感觉到使用的必要性(以后也许会)

    terraform apply目前是在sandbox构建以后,merge到mater,然后自动在CI上面进行

    也许有点多余了,让固定的一个人从本地执行也许就够了,毕竟更改不是那么频繁

    terraform destroy基本只在sandbox测试的时候用,production目前还没用到

  • 微服务好像喜欢这样? GCP + Kubernetes + Go + Other language

  • 需要子类实现的话,应该是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

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

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