• circleci 支持并行跑测试,只要付费就行了。

    大概逻辑:

    1. 起 24 套测试环境
    2. 把测试文件切分一下,然后交给 24 个环境去跑。 TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=name)"
    3. 最终把结果汇总起来。

    这是我们的配置,比较陈旧了,但是还能正常工作,下一步是升级到 version 3。

    # Ruby CircleCI 2.0 configuration file
    #
    # Check https://circleci.com/docs/2.0/language-ruby/ for more details
    #
    version: 2
    jobs:
      build:
        parallelism: 24
        working_directory: ~/workstream
        docker:
          # specify the version you desire here
          - image: circleci/ruby:2.6.6
            environment:
              BUNDLE_JOBS: 3
              BUNDLE_RETRY: 3
              BUNDLE_PATH: vendor/bundle
              PGHOST: 127.0.0.1
              PGUSER: root
              RAILS_ENV: test
          - image: circleci/postgres:9.6
            environment:
              POSTGRES_USER: root
              POSTGRES_DB: workstream_test
              POSTGRES_PASSWORD: test
          - image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
          - image: redis
    
        steps:
          - checkout
          - run: cp config/database.yml.example config/database.yml
          # - run: sudo chmod 777 /root/repo/vendor/bundle
    
          # Download and cache dependencies
          - restore_cache:
              key: workstream-{{ checksum "Gemfile.lock" }}
    
          - run:
              name: install dependencies
              command: |
                bundle install --jobs=4 --retry=3 --path vendor/bundle
    
          - save_cache:
              paths:
                - ./vendor/bundle
              key: workstream-{{ checksum "Gemfile.lock" }}
    
          # Database setup
          # - run: bundle exec rake db:create
          - run: bundle exec rake db:schema:load
    
          # run tests!
          - run:
              name: run tests
              command: |
                mkdir /tmp/test-results
                TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=name)"
    
                echo "run the following line to reproduce the failed test case"
                echo "========================================"
                echo "bundle exec rspec --seed 100 $TEST_FILES"
                echo "========================================"
    
                bundle exec rspec --profile 10 \
                                  --format RspecJunitFormatter \
                                  --out /tmp/test-results/rspec.xml \
                                  --format progress \
                                  --seed 100 \
                                  $TEST_FILES
    
          # collect reports
          - store_test_results:
              path: /tmp/test-results
          - store_artifacts:
              path: /tmp/test-results
              destination: test-results
    
    
  • 我们用的 circleci,一次起 25 个 container 跑测试。本来 45 分钟的测试,4 分钟跑完。

  • 谈一点 Event Sourcing 和 CQRS at 2021年06月04日

    Event Sourcing 主要的思想是记录事件,没有修改和删除。事件 replay 得到结果,有点函数型的数据不变的意思。

    我的理解 Event Sourcing 是个状态机。下游通过持续不断的 apply event,获得和上游一样的状态。

  • 答案是,人多。

    上海一个市的人口,差不多等于整个加拿大人口总量。

  • 一楼说的都是真事。

    那个评论同事漂亮被警告的,据说原因是“不能评价别人的长相”

  • 你对 cloudformation 怎么看?

    如果让你选择,你会用 terraform,还是 cloudformation?

  • 人的精力有限,

    选择一:做一个全面手,对全局有一个整体的认识,然后重点精通一两个领域。

    选择二:做技术专家,一个领域钻到底。

    两个都是不错的选择。

  • 时效好像是三年。

    三年之后,可以再考虑考个 professional 版本。

  • 这是我们公司的简介,我们还在招聘 ruby 程序员,欢迎投简历。

    https://ruby-china.org/topics/40332

  • 我把你重复发的几个招聘帖删了,建议你把所有的招聘岗位合到一起,不要重复发帖。

    此外请把公司名称/公司简介/薪酬待遇都写清楚。要不然只能当做骗简历的广告帖处理。

  • 对于这种待条件的查询

    FastCount.new(User.where("id > 200")).call

    数据库的 explain 的估算值好像是根据直方图来估算的。如果直方图的粒度很粗,字段的值的分布也不均匀,估算值可能会有很大的误差。

  • 好奇,你咋不弄几个 counter 存统计数据。

    每隔一小时计算一下 count 就可以了。

  • 利用好元编程重构下代码 at 2021年04月13日

    元编程一时爽,后人维护火葬场。

    元编程主要用来工具 (lib) 中,CRUD 时最好不要用元编程。

    • 过一个月,你不知道你自己写的是什么意思。
    • 团队里的新程序员读不懂你的代码。
  • 上海 Ruby Tuesday 求反馈 📝 at 2021年04月01日

    我经常听别人说到这点,所以就列出来了。

    那我改的委婉一点。

  • EC2 差点删库跑路 at 2021年03月24日

    你们的数据为什么放到 instance store 中,而不是 EBS volume。如果放到 EBS Volume,Terminate Instance 似乎并不会影响到 EBS Volume 的数据。

  • 这功能真棒。不需要额外的 gem 了。

  • 请投递简历到这个邮箱,谢谢。

  • 微服务的 health check,大家通常是怎么做的?

    如果 gPRC 服务挂掉了,caller 通常该怎么办呢?如何在框架层面统一处理微服务挂掉的情况?

  • 如果我没记错,HTTP/2 是依赖 HTTPs 的,使用 gPRC 切分 microservice,各个服务之间还需要设置证书吗?

  • 微团队管理日志 at 2021年01月08日

    写得真好,对“异步流”的工作方式非常赞同。

  • object.to_json 之后返回的 json 信息没有 class 的信息,无法恢复。

    除非,你把 class 信息带进去:

    class Company
      def to_json_with_class
        self.attributes.merge(klass: self.class.to_s).to_json
      end
    end
    
    1. 转成 json

      json = company.to_json_with_class
      
    2. 从 json 转成 object

      attrs = JSON.parse(json)
      object = attrs.delete('klass').constantize.new(attrs)
      
  • 晚上请教大家一个问题,前端的微服务怎么做。

  • Ruby on Rails 工程师去大厂 at 2020年10月26日

    分布式为了保证时序的策略通常有:

    1. Lamport 逻辑时钟,或它的各种衍生逻辑时钟。CockroachDB 用的这种策略。
    2. 原子钟提供的绝对时间。google spanner 用了原子钟的绝对时间策略。TrueTime
    3. 有个中心节点负责顺序,用单调递增函数来保证顺序。所有其他节点做任何事情之前,要先和它沟通,要一个 sequence number。TiDB 好像用的是这种策略。
  • Ruby on Rails 工程师去大厂 at 2020年10月26日

    如果你有做自由职业/独立开发/创业的规划,那么 Rails 最好还是不要丢掉

    非常认同炮哥这句话。

  • @wppurking @lidashuang

    今天我买了 Surge 3,用了虚拟网卡的模式,再也不用一个个的给每个 App 设置代理了,也不需要设置 HTTP Proxy 了。节省了大量时间,以后可以专心搬砖了。

    真的是太好用了,赞赞赞。

  • 外语翻译 at 2020年09月20日

    因为重复发帖,我把这个帖子移动到 "no point" 节点了。

  • 今晚的合照

  • 今天暂时置顶本帖,免得大家错过。

  • 报名参加 +1

  • 我们内部管理系统用的 Ant Design Pro。