• Let's Encrypt 爬坑记 at June 28, 2019

    acme.sh 可以使用 dns 级别的验证 生成 wildcard 的证书

    acme.sh 已经支持了 ali_dns 了

  • 你可以单独引入这个 js 的 没必要编译一个大的 application.js

  • 我是用 stimulus 解决了以前困扰我的各种 turbolinks 的问题 以前遇到各种重复绑定的,现在都靠 disconnect 解耦

  • 回头在我的穷困潦倒搬瓦工上装装看看效果

  • 现在 vscode 支持 远端编辑了 可以试试哟

  • 如果是在 rails 中处理的话 建议如非必要,不要上 react 的 router 和 redux 还是仍由 rails 管理路由,就加载个 react.js 在 head 中 之后去找 dom 渲染

  • 是时候普及一下 kill 和 linux 空间占用的知识了

    在 linux 删除文件后,如果有进程在之前打开了这个文件,则这个删除的文件的空间是不会释放掉的 ,

    (帖子提到的拆分日志后 puma 之后产生的日志就消失了 是因为之前 puma 进程打开的文件句柄,实际上是被删除了的 所以就会消失)

    需要让打开这个文件的进程释放这个文件句柄,

    那么最粗暴的释放句柄的方式是?

    结束掉这个进程就好了...

    然而 有些关键是有些进程并不方便被直接结束 (比如这里的 puma 进程)

    其实 kill 并不像字面意义那样完全杀气腾腾,其实里面还隐藏了一个叫做信号量的东西

    发送不同的信号量会实现不同的作用,这个具体得看进程程序是咋写的,只是一般情况下默认的信号量大家都是结束进程罢了

    根据 puma 的文档 https://github.com/puma/puma/blob/master/docs/signals.md

    kill -HUP puma.pid 就会根据路径重新打开文件句柄,而不影响其他的服务

    (重新打开新的文件句柄,则又发现了新的文件,则日志就可以正常输出了)

    so jasl 的这个是完全可行的

  • 额?其实 也可以在 gems 里找到对应 gem 的源码?

  • 社区讨论 stimulus 的本身不多,还是挺遗憾的。但是用起来确实非常爽,就是因为太简单了,反而不知道怎样去跟其他人介绍这东西

  • "在状态变化低于 3 个左右的一个界面"

    这是我自己的一个使用惯例

    就是 一个 UI 模块中,有包含 3 个以上的状态,任何一个状态的变动都会引起新的 ui 变动

    其实这个的定义是来自 react 的本质,就是 数据 决定 UI,

    比如登录窗口 一个地方,有 用户名 清空 有 密码控制显示 有没填写密码警告 没填写用户警告 , 这种状态就比较多 (>3), 比较复杂,用 react 组件写,逻辑就比较清晰,只需要关注 state 就好. 当然 你用 stimulus 去操作这些也可以,只是会疲于在各个 dom 里去隐藏或者显示啥的,比较麻烦一点 逻辑中混用的 ui 操作比较多

    但是类似于 点击后加载一个数据,或者点击之后加载个报表,点击之后读取 搜索条件 去搜索 这种状态就只有加载和未加载,直接上 stimulus + SJR + turbolinks 就特别轻松,无脑写就好

  • 服务本身应该还好 m$ 对中国市场还是很重视的 gov 不是还拿到了 windows 的源码么 主要是墙高了 或者国家从安全层面考虑 要求私有代码必须落地国内

  • 在我举的例子当中,当进行数据库事务的时候 本机的 CPU 是闲置的状态,这个时候切换上下文是会提高 cpu 效率的,而这种情况的变种我觉得还经常会发生 (瓶颈在数据库). 所以我会对您那个公式有点不同意见

  • 简化一下情况

    假设运行后端的服务器只有 1 核的 CPU

    之后开一个 PUMA , puma 跑 20 个线程,

    现在有大量数据库事务的任务,每个事务执行需要 1s,

    再假设除了执行数据库,其他操作小于 1ms 的响应

    如果 pool 的大小是 2, 那么是不是此时就只能并发两个请求?

    是否能等效理解为 在执行事务的时候,此时服务器的 cpu 是空闲状态,但是却因为数据库连接池的问题不能进行服务?

    如果此时连接池开到 20, 将 puma 的线程池满

    似乎就可以进入 20 个并发了

    或者我的理解有问题,有一些概念上的错误?

  • 这个线程池个数设置方式 应该比较靠谱。

    特例是,在 puma 的一个 thread 里并行用到了一个以上的连接。但是似乎我也没想到这种情况的场景。

    而且算法是在 puma max threads 的情况下的,一般压力不会那么大

  • 看上去都是数据库?

    加大点 pool 比如 30 - 50 试试 ?

  • 😆 不能老让小姐姐们玩 postman 不是么......

    最后还是决定牺牲一点性能,在 rails-api 上 继续写传统 view, 复杂点的就 webpacker react 跑一下凑凑热闹

    在 pv 没到 10m 之前 性能损失在 20% 以下都还能接受

  • 我试试 @kayakjiang

  • 理论上你可以让 puma 承担所有工作,只是说 puma 是基于 ruby 的 , 效率没有基于 nginx 的高

    比如你开一个 puma 进程,进程再跑 20 个线程

    但是很有可能你一个网站就有超过 5 个静态资源,之后只要有 4 个访问并发,你 puma 的线程数就占完了,新访问就没办法进来了

    而 nginx 首先在处理静态资源的情况下效率就比 puma 高很多,对 wait 的处理也非常好,对于静态资源,几千个并发随便来,

    同时就算 puma 资源耗完了,nginx 也可以先将连接进入 wait 状态,等待 puma 可以接受新资源了,再进行转发

    再就是一些跟网站本身没有多大联系的功能,比如 SSL 证书,或者多个网站部署到同一个 ip 等等,要说用 puma 可以不可以实现,也可以,但是复杂性大大增强了,耦合性也急速的膨胀。然而对于这种东西,nginx 处理起来驾轻就熟,直接上配置就好了

    总结下来,就是专业的事情,专业的工具来干。用螺丝刀也可以钉钉子,但是如果有锤子,还是上锤子比较好

  • 邮件写的已经要 delay 了

  • 印象中猎聘是在八里庄那边 没想到也是用的 rails 啊

  • 不算不算 😁

  • 哎呀 露脸了

  • 内存泄漏真的是超级超级难查

    楼主辛苦了

  • 感谢刘老板赐教

  • 在官网上没找到相关内容呢 这个我还真不是太了解

  • 不要把分析 N 个公司作为一次原子操作,

    建议把分析一个公司,变为一次原子操作

    用那种加权方式 比如 A 客户等级是 100 B 客户等级是 10 , 之后 A 客户的一个企业分析权值就是 100, B 的一个企业分析一次分析就是 10

    之后一个 true 循环这个大数组,每循环一次,数组里所有权值 + 1 , 之后再把权值最大的任务执行掉,拿出去。

    这里的重点,是每检测循环一次,数组所有的权值 +1

    这样,具有最高权值的任务就会优先执行,低权值的数据,也会因为遍历次数的增长,而变成高权值的数据,不至于在这个循环里没有执行的机会

  • 我这刚试了 有呀

  • bwg 用户路过,好像 bwg 不需要开 80 端口

    http://23.105.196.112/
    Connecting to 23.105.196.112:80... connected.
    HTTP request sent, awaiting response... 301 Moved Permanently
    

    证明 nginx 上 80 端口已经可以正常访问了

    至于 ip 配置 443, 我这没听过给 ip 签名的,理论上证书是给域名签名的,而不是给 ip 地址签名,证书的 CA 那块不会过吧

    我个人建议新手可以用 nginx + puma 的方式 至少不用编译 nginx ,免得带来各种麻烦

    nginx 的配置你可以参考下 capistrano puma (https://github.com/seuros/capistrano-puma)

    里面有一个 nginx 的自动配置 cap production puma:nginx_config

    要是纯新手,只要使用 ubuntu apt 安装的 nginx, 不需要做其他配置

    看到新人学习 rails 真好

  • 只有一个废弃的项目用了 render file

  • 有两台机器实际上,A 和 B 都有 Puma, A 有 nginx

    A 的 nginx 的 upstream 分别到 A 和 B 的 PUMA 上

    我也觉得 2000 多还好,

    local_port 不改也有 2w-3w, 目前肯定是够用

    主要还是怂

    因为这个项目的业务逻辑关系,流量特别不稳定,经常瞬发 10x 平日流量,我怕到瓶颈再想办法就比较麻烦了

    其实我觉得开一下 tcp_tw_reuse 应该问题不是太大,就算占满了都有解

    总之 感谢 @early @quakewang