circleci 支持并行跑测试,只要付费就行了。
大概逻辑:
TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=name)"
这是我们的配置,比较陈旧了,但是还能正常工作,下一步是升级到 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 主要的思想是记录事件,没有修改和删除。事件 replay 得到结果,有点函数型的数据不变的意思。
我的理解 Event Sourcing 是个状态机。下游通过持续不断的 apply event,获得和上游一样的状态。
答案是,人多。
上海一个市的人口,差不多等于整个加拿大人口总量。
一楼说的都是真事。
那个评论同事漂亮被警告的,据说原因是“不能评价别人的长相”
你对 cloudformation 怎么看?
如果让你选择,你会用 terraform,还是 cloudformation?
人的精力有限,
选择一:做一个全面手,对全局有一个整体的认识,然后重点精通一两个领域。
选择二:做技术专家,一个领域钻到底。
两个都是不错的选择。
时效好像是三年。
三年之后,可以再考虑考个 professional 版本。
这是我们公司的简介,我们还在招聘 ruby 程序员,欢迎投简历。
我把你重复发的几个招聘帖删了,建议你把所有的招聘岗位合到一起,不要重复发帖。
此外请把公司名称/公司简介/薪酬待遇都写清楚。要不然只能当做骗简历的广告帖处理。
对于这种待条件的查询
FastCount.new(User.where("id > 200")).call
数据库的 explain 的估算值好像是根据直方图来估算的。如果直方图的粒度很粗,字段的值的分布也不均匀,估算值可能会有很大的误差。
好奇,你咋不弄几个 counter 存统计数据。
每隔一小时计算一下 count 就可以了。
元编程一时爽,后人维护火葬场。
元编程主要用来工具 (lib) 中,CRUD 时最好不要用元编程。
我经常听别人说到这点,所以就列出来了。
那我改的委婉一点。
你们的数据为什么放到 instance store 中,而不是 EBS volume。如果放到 EBS Volume,Terminate Instance
似乎并不会影响到 EBS Volume 的数据。
这功能真棒。不需要额外的 gem 了。
请投递简历到这个邮箱,谢谢。
微服务的 health check,大家通常是怎么做的?
如果 gPRC 服务挂掉了,caller 通常该怎么办呢?如何在框架层面统一处理微服务挂掉的情况?
如果我没记错,HTTP/2 是依赖 HTTPs 的,使用 gPRC 切分 microservice,各个服务之间还需要设置证书吗?
写得真好,对“异步流”的工作方式非常赞同。
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
转成 json
json = company.to_json_with_class
从 json 转成 object
attrs = JSON.parse(json)
object = attrs.delete('klass').constantize.new(attrs)
晚上请教大家一个问题,前端的微服务怎么做。
分布式为了保证时序的策略通常有:
如果你有做自由职业/独立开发/创业的规划,那么 Rails 最好还是不要丢掉
非常认同炮哥这句话。
今天我买了 Surge 3,用了虚拟网卡的模式,再也不用一个个的给每个 App 设置代理了,也不需要设置 HTTP Proxy 了。节省了大量时间,以后可以专心搬砖了。
真的是太好用了,赞赞赞。
因为重复发帖,我把这个帖子移动到 "no point" 节点了。
今晚的合照
今天暂时置顶本帖,免得大家错过。
报名参加 +1
我们内部管理系统用的 Ant Design Pro。