• upstream api_production {
      server 172.16.0.13:3001 fail_timeout=0;
      server 172.16.0.12:3001 fail_timeout=0;
      keepalive 500;
    }
    
    server {
      listen 80;
    
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "Upgrade";
      proxy_set_header X-Forwarded-Proto http;
    
      listen 443 ssl;
      ssl_certificate         /root/.acme.sh/fullchain.cer;
      ssl_certificate_key     /root/.acme.sh/key;
      add_header Strict-Transport-Security "max-age=31536000";
    
    
      root /var/www/api/current/public;
      try_files $uri/index.html $uri;
    
    location /api {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    
        proxy_pass http://api_production;
    
      }
    
      location / {
        rewrite ^/(.*)$ /api/$1 last;
        proxy_pass  http://api_production;
      }
    
  • 这个开过,开过常用的 16 和 500 没有什么明显的效果似乎

  • 主要都是 puma 端口上的 TIME_WAIT

    tcp        0      0 172.16.0.13:3001        172.16.0.13:58594       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:34790       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:57166       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:34378       TIME_WAIT
    tcp        0      0 172.16.0.13:46242       172.16.0.12:3000        TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:60220       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:32940       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:59416       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:57810       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:35356       TIME_WAIT
    tcp        0      0 172.16.0.13:33226       172.16.0.13:3001        TIME_WAIT
    tcp        0      0 172.16.0.13:443         223.104.94.24:53306     TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:35066       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:58744       TIME_WAIT
    tcp        0      0 172.16.0.13:46138       172.16.0.12:3000        TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:60702       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:35518       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:60944       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:57132       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:60464       TIME_WAIT
    tcp        0      0 172.16.0.13:47050       172.16.0.12:3000        TIME_WAIT
    tcp        0      0 172.16.0.13:443         117.136.63.83:14588     TIME_WAIT
    tcp        0      0 172.16.0.13:50070       172.16.0.12:3000        TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:34458       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:33596       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:35192       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:60730       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:59854       TIME_WAIT
    tcp        0      0 172.16.0.13:3001        172.16.0.13:59854       TIME_WAIT
    
  • 哈哈 在 medium 也看过一篇 https://medium.com/@coorasse/goodbye-sprockets-welcome-webpacker-3-0-ff877fb8fa79

    只不过 rails 6 就默认 webpacker 了

  • 阿里云默认不开放 25 端口

  • rails-api 3 年多

  • Ruby 的好朋友 -- jemalloc at October 31, 2018

    使用会带来啥风险呢?

  • MongoDB 日志处理 at August 08, 2018

    少年 你需要 logrotate

  • 哈哈哈 我最近也被 cc + ddos cc 问题都不大 主要是怕 ddos

    另外 cc 一般会有大量的是国外的 ip 发过来的

    如果是国内业务,可以用智能 dns 把这些国外节点访问弄走

  • [已解决] V2EX 挂了? at July 16, 2018

    我就知道会有这个帖子.....

  • 招聘困难 at June 20, 2018

    这是个炫耀贴

  • 你需要了解 link_files 和 link_dirs 的意义

    他们的意义是在于

    你的开发环境和你的部署环境是有不同的 这样的话 如果全都上传到部署环境 (包含配置), 是会出问题的 (比如 database.yml 或者 application.yml 等)

    于是 在你部署的时候,部署的版本的这些文件,可以用 link_files 或者 link_dirs (目录) 代替 (使用 ln 软连接的形式)

    这些软连的地址,是需要在服务器上的,你需要先 ssh 到你的服务器,建立这些文件 (文件夹) 写上相应的内容

    如果你的服务器所用的配置与你的开发完全一致 (不建议) 其实你是可以干掉 link_files 和 link_dirs 的

  • Capfile 里可以关闭 migrate

    注释掉 require "capistrano/rails/migrations"

  • 会投票

  • xxx 那里 做一个异步处理 交给 active_job 处理

    或者就像 @w7938940 同学说的那样 用 sidekiq-scheduler

  • 使用 cocoon 的时候注意下,他是直接在页面显示的时候就把 subform 的信息加载进来了,也意味着,如果你在 subform 上有 after_initialize 的话 它只生效一次 (随机,时间戳 都是在页面生成的时候出现,再添加 sub model 时就只是加载 js 里的信息 )

  • 凑巧最近两天试了 active_storage. 如果是使用直传的话需要注意一下 cors 的限制,

    aws 以及类似的服务 (digitalocean 的 spaces),在设置 bucket 的 cors 的时候 ,需要将域名允许跨域,且其 headers 允许里加入* 后才行.(我是在 digitalocean 测的,他的 cors custom headers 似乎只能配* 而不能配置 aws-*)

    ps 我觉得最炫酷的还是提供不同 storage 的同步功能。

  • Rails 静态资源编译 at April 23, 2018

    楼上正解

    如果是用 capistrano 部署的话 记得在 Capfile 里把 precompile 拿掉

  • 哈哈,去上海了呀

  • nil at March 20, 2018

    直传稍微有点不好的就是没办法做大小限制,再就是有时候云服务商回调的时候有存在回调失败的情况,之后就很难处理这种回调失败的数据

    如果单传图片,或者不需要处理的文件,则直连非常好使

  • 哦?那我理解的 puma 的 threads 配置似乎是有问题了 有个 min max 同时我也看到了有些情况数据库连接突然的减少和增多 我还以为是回收和释放了呢

  • thread 也是会回收的

  • capistrano 用的多一点

    用 docker 也不赖

  • 我曾经也遇到过这个问题,

    ruby 的 gc 我是这么理解的

    每次内存使用完毕后,会标记为 可释放,但是什么时候释放,就得看 ruby 的 gc 和操作系统的释放条件了 我记得在某篇文章记得 ruby 启动有个参数可以控制 gc 的启动条件,也可以在编译 ruby 的时候写进去

    ps 假设一次消耗 100M 按照题主的 puma 配置:4workers, 每个 worker 8~16 核 跑满就需要 4 * 16 * 100M = 6.4G, 但是 puma 我当时选择的是 worker 的工作方式,回收 threads 是要靠主线程的, 当主线程认为压力过大的时候,worker threads 是来不及销毁的,直接拿来处理下一条

    如果是 4 cpus / 8G 内存,就刚好够用,但是如果这台机器跑了其他的东西,比如 db, redis 啥的,估计服务就挂了

    我遇到的实际情况是

    每台机器本身访问量在 1000rpm 之后我们有个黑白名单,名单本身不小,大概 2w 条,这些数据不稳定,易变。 之后写入的数据要过这个名单,过一次加上七七八八的计算,要 2 秒. 一个访问就消耗 20M 左右的内存,,但是这种过滤操作本身量不多 之后 puma 就占了 1.5 G, 2 cpus/4G 运行个 1-2 小时,服务器内存就到 85%, 当时研究了好久,最后发现 puma 开的 threads min 和 max 都设置的 30.

    后来一算 觉得 thread 似乎很不合理,网站大部分数据是在 30ms 之内就请求完的, 其实我平均每个访问控制在 100ms,10 个 threads 在每个 worker 下, 这样 2 workers 我就可以承受 6000rpm 的访问, 之后我就修改了 threads 成为 min 5 max 15, killer 设置成 1.5 G 内存,90% 启用,基本很少看到 killer 运行

  • 西南地区的 ruby 都集中在成都啊 重庆好荒凉的感觉

  • 现在用第三方服务,都是直接看 rest api 之后自己实现成 gem。。。

  • 如果实在不行 但是又非常有必要访问 这招 通吃 但是 ssl 的意义就没了

    require 'openssl'

    OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

  • 少年 阿里 centos 6.x 吧?升级下你的 openssl