#14 楼 @xiaoronglv 谢谢啊 4 × 16 还是处理不过来呢,还是要换编程方式
#3 楼 @xiaoronglv 我换 puma 试了一下,感觉更慢啊,日志都翻得很慢,像跑不动的样子。
第一次用,就配了最简单的几项,puma.rb 是这样的
environment 'production'
threads 256, 256
port 8080
bundle exec puma 启动的,启动的输出是正常的,资源占用是下去了,但效果还没有 Passenger 好。 请问我哪里配错了么?
总结,从 passenger-status 的输出其实是可以看出问题来的,我之前没有搞清楚每个数据的含义,Sessions 这个数据可以说明进程忙闲程度。详见 https://www.phusionpassenger.com/library/admin/standalone/overall_status_report.html#dealing-with-common-request-related-problems
简单来说,我这问题就是处理一个请求的时间可长可短,当意外发生时,进程被占住的时间太长(比如一分钟),进程就会不够用了,就会出现大部分时候没问题,偶尔出问题的情况。
这种 IO 密集的应用应该用事件驱动的方式编程,我打算换 https://github.com/eventmachine/eventmachine 了。 谢谢各位。
#3 楼 @xiaoronglv #6 楼 @rei 麻烦请问,我是这么理解的,你们看有问题么 我这 ruby 程序不同之处就是处理一个请求时间略长,那我们简化一下,就是一个请求进来等十秒,然后返回。 然后假设我机器够好,开 60 个 ruby 进程,60 个客户端,每个都能分到一个进程。60 个并发对 nginx 来说毛毛雨,随便搞。 这样每一个进来的请求都应该能立即得到处理,不应该堵在队列里。
请问我这个理解有问题么?
#3 楼 @xiaoronglv #4 楼 @sevk 我也怀疑过是不是被远端 block 了。 但如果是这样,现象不应该是 24 个 ruby 进程被占满么。但实际情况是,没有用尽 24 个进程,明明有空闲的进程,就是不往里面派,堵在 Requests in queue 里。 而且还有一个现象,就是我这个服务里还有一些不依赖远端服务的接口,这些接口就是简单做个数据库查询就返回了,在服务器响应慢的时候,这些接口也慢。
所有的远端请求都有日志,从日志来看,没有明显的慢,所以我觉得不像是远端问题,或者,如果要确定是远端慢,应该从哪儿分析呢?
The answer is
class API < Grape::API
get '/' do
content_type 'text/plain'
body 'Hello World'
# return value ignored
end
end
方法真多啊,感谢你们!@hz_qiuyuanxin @mueven @fresh_fish
#3 楼 @zhang_soledad 我就是放在 config/initializers/ 里面的
#1 楼 @reyesyang 这么多天了,终于被你答了,非常感谢。
#1 楼 @xxqfamous 那就要写很多个 namespace 了,也不爽
给 params[:user] 加一个 to_h 可以解决,见 https://github.com/intridea/grape/issues/553 https://github.com/intridea/hashie/pull/125
非常感谢楼上的各位,分享了很多好东西。 Lina 是最符合我最初的问题描述的,值得试用。 恕我愚钝,不太搞得懂 https://github.com/r7kamura/autodoc 就没管了。
另外三个东西,swagger,BulePrint,RAML 正好是目前最有影响力的三个 API design tool,都被朋友们提到了。 在了解他们的过程中,我也接受了单独写一份 API 文档的思路,而不是觉得一定要自动生成文档。 因为在最开始设计讨论的时候,总要有个记录方式,应该是先设计好了再来实现,后端的实现还不存在,生成文档就是无根之水。
如果先写 API Spec,那较量的的就是这种描述方式是不是亲近人类思维,同时配套的工具是不是强大(比如编辑 API Spec 的工具,生成前后端代码的工具)。初步印象,觉得 RAML 最对胃口,那就先试试他了。
这里,也提供几个对比测评,以享后来者 http://www.mikestowe.com/2014/07/raml-vs-swagger-vs-api-blueprint.php http://apievangelist.com/2014/03/08/hello-world-product-api-with-blueprint-raml-and-swagger/
再次感谢各位。
自问自答一下,这样可以,不知道是不是最好的写法
json.positions do
@place.positions_.each do |k, v|
json.set! k do
json.array! v
end
end
end
#8 楼 @Rei 多谢您的建议 #9 楼 @HungYuHei 多谢指路,知道要看啥了
请问楼上二位,json serializer 是个啥东西,一个库?一个类?Google 了一下还是不知所措啊。 http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html
我用 group_by 以后的 hash 去 as_json 怎么就报错了呢 undefined method `key?' for #JSON::Ext::Generator::State:0x37e7db8
#3 楼 @hammer 多谢提示。我就是用的 group_by,但卡在 undefined method `key?' for #JSON::Ext::Generator::State:0x37e7db8 问题描述里我就说了,我可以得到这个 hash,但无法把这个 hash 放到 json 里,这样写是不行的
def positions_
self.positions.group_by{|p| p.name[0]}
end
def as_json_options
@options={}
...
@options[:methods] ||= [:positions_]
...
end
def as_json(options={})
super(as_json_options)
end
关键是怎么放到输出的 json 里呢
这是有颜色的截图,我 gem list 了一下,也没发现什么 win32console,而在另外一台机器上,就是没颜色