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 年多
使用会带来啥风险呢?
少年 你需要 logrotate
哈哈哈 我最近也被 cc + ddos
cc 问题都不大 主要是怕 ddos
另外 cc 一般会有大量的是国外的 ip 发过来的
如果是国内业务,可以用智能 dns 把这些国外节点访问弄走
我就知道会有这个帖子.....
这是个炫耀贴
你需要了解 link_files 和 link_dirs 的意义
他们的意义是在于
你的开发环境和你的部署环境是有不同的 这样的话 如果全都上传到部署环境 (包含配置), 是会出问题的 (比如 database.yml 或者 application.yml 等)
于是 在你部署的时候,部署的版本的这些文件,可以用 link_files 或者 link_dirs (目录) 代替 (使用 ln 软连接的形式)
这些软连的地址,是需要在服务器上的,你需要先 ssh 到你的服务器,建立这些文件 (文件夹) 写上相应的内容
如果你的服务器所用的配置与你的开发完全一致 (不建议) 其实你是可以干掉 link_files 和 link_dirs 的
Capfile 里可以关闭 migrate
注释掉 require "capistrano/rails/migrations"
会投票
嗯呐 已经 提了 pr
https://github.com/ruby-china/homeland/pull/1032
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 的同步功能。
楼上正解
如果是用 capistrano 部署的话 记得在 Capfile 里把 precompile 拿掉
哈哈,去上海了呀
直传稍微有点不好的就是没办法做大小限制,再就是有时候云服务商回调的时候有存在回调失败的情况,之后就很难处理这种回调失败的数据
如果单传图片,或者不需要处理的文件,则直连非常好使
哦?那我理解的 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