根源是你把 App Server 直接暴露给了客户端,这种叫 Slow Client。
你可以这么看,后端在处理完成以后需要将 Response 返回给客户端,或接受来自客户端的 Request 信息。这个过程如果 Client 的传输速度低,传输的这个过程将会堵塞住 Unicorn 的处理通道。
这些持久性的连接会导致 Unicorn worker 会把大量的时间花在保持连接上(或者什么都没做)。这个时候如果连接多,Unicorn 就堵塞住了。然而在这个时候 Unicorn 处理能力实际上是有的,只是因为连接通道用完了。
所以你需要在 Unicorn(包括 Puma, Passenger)前面加 Nginx 之类的来解决问题。这样才前面说到的传输过程(WAIT 阶段),可以由 Nginx 来保持连接和传输,Nginx 可以保持连接,同时又能接收其他新进来的请求,交给后面的 Unicorn 来处理。而 Unicorn <-> Nginx
之间因为局域网的原因,传输速度稳定且快,所以不存在 Slow Client 问题。
https://github.com/ruby-china/unicorn/blob/master/PHILOSOPHY-zh-CN
已修复
这种工具,你用 Ruby 来写,反而麻烦了
没人来做这个事情,再者其实按天没那么多新闻。
你可以看看 Ruby Weekly
稍后修复
http://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html
表结构:
class User < ActiveRecord::Base
end
class Group < User
end
group = Group.create
group.type
=> "Group"
user = User.create
user.type
=> "User"
然后就是 Rails 不是万能药,别以为你用了 Rails,基础的 HTML / JavaScript 就不需要了,做这些事情的时候你该用什么用什么,别什么都依赖 Rails
如果不会的话,建议使用最简单的 HTML
<form action="/resources/search" method="GET">
Search For: <input name="search_id" value="<%= params[:search_id] %> />
类型: <select name="resourcetype_id">
<option value="2" <%= "selected" if params[:resourcetype_id] == "2" %>>2</option>
</select>
<button type="submit">搜索</button>
</form>
你理解有误,搜索 Context-Disposition
看看这是干嘛用的!
用户上传的时候完全可以生成一个随机的 URL,你不需要把文件名放 URL 里面
例如:
https://l.ruby-china.com/photo/2016/c309db0b49cab85a32f756541ea0e2b0.png
设定 disposition: :attachment, filename: "Foo Bar 中文.jpg"
,这个 URL 下载会得到 Foo Bar 中文.jpg
..... 怎么这么死板,有何区别?结果都一样的
post.image.service_url(filename: "post-#{post.id}-#{post.created_at}")
ActiveStorage 的设计是上传的时候存储文件名在数据,下载(生成下载 URL)的时候指定 disposition
参数:
attachment.file.service_url(disposition: :attachment)
这样会告诉 S3 用之前数据库里面存储的文件名来实现 disposition
下载。
也就是能达到你要的得到原始文件名的效果。
Amazon S3 的实现貌似没有支持。
我做的 Aliyun 的就做过类似事情,实际上是在 service_url
生成的时候做了小动作。
https://github.com/huacnlee/activestorage-aliyun#use-for-image-url
描述不清楚,查询的时候 includes
搞不了?
中文用户的烦恼
招过去当老师吗
部署都搞不定你还是不要碰这个项目了!
你应该找几个专业的 Rails 工程师
https://github.com/rails-engine
你是想要的东西
其实现在 Docker 化部署,以及各类其他工具的出现,这个问题似乎已经不再那么重要。
我估计是 Action Cable 你没配置对,你可以试试把那个屏蔽了
卡死是怎么个卡死?描述更细致一些
Windows 10 安装 https://docs.microsoft.com/en-us/windows/wsl/install-win10
然后在 Linux 环境下玩
另外,GitHub Primer 也挺不错的,类似 Bootstrap 的命名风格
POST 提交到了 http 的?为何不该为 force_ssl ?
不这么放,我都不知道 Ruby China 有这么多精品内容了
@jasl 的 role_core
如果你只是想简单的执行那个 js 文件的话,可以试试用 shell 的方式调用:
res = system("node foo.js")
{“orgs”=>
=>
不是 JSON 的格式已修复
正确姿势:
request_params = { appid: app_id, q: q, from: from, to: to, salt: salt, sign: sign }
HTTParty.get("#{url}?#{request_params.to_query}")
http://api.rubyonrails.org/classes/Hash.html#method-i-to_query