http://www.toptal.com/ruby-on-rails/top-10-mistakes-that-rails-programmers-make
"Blocking on calls to external services"
这个是没错,但是比如用 http 协议包装第三方服务(只能同步响应),比如查水费,需要 2 秒,这种场景怎么破?
- Extract Form Objects
说到这里,我觉得还是 django 好啊。modelform 对付企业里常见的 CURD 开发简直是效率神器。
Rails 或者说 Active Model 里不允许定义好字段,这个太憋屈了。ActiveRecord 的 enum 也是 bug 多多。
#18 楼 @hjleochen 如果不需要返回的远程调用,我自己写了个 hack,就是启动一个 nohup 的 curl 子进程。目前用来上传图片,效率刚刚的。超级稳定。而且自带重试啊有木有。
#19 楼 @est 当然如果不需要返回的这种 curl 或者原文说的任务队列都是可以解决的。 #20 楼 @alsotang controller 不能 epoll 方式吧。controller 还是要等待请求结果再进行响应的吧?
BTW:个人不喜欢 Form Objects 之类的东西,这不是 Java 的做法么,为什么呢?
"Putting too much logic in the model" "Functionality such as generating email notifications, interfacing to external services, converting to other data formats " 除了生成 Email 之外我稍微有点同意,其他放在 Model 里面真的有很大问题么?
职责不明确? 难道 Model 就是负责和数据库交道的?把自己转换为别的样子(converting to other data formats)展示给人家就不是自己的职责了?对外提供一个能力内部而使用别人的能力(external services),就 不能 是自己职责了?
文件太大、类太大? 其实文件行数多些应该不是非常大的问题,现在编辑器、IDE 这么好用。之前 C/C++ 的文件 2,3 万行也很正常的啊。
Form Objects、Service Objects 还有什么什么....越来越多的概念,越来越复杂的开发流程,这真的是你们想要的 Rails 么?我觉得 Rails 已经非常复杂了,新手入门太难了。
如果当年我看到的 Rails 是这样子的,我觉得我应该是不会学的。当然我只是业余的写写 Ruby 和 Rails,以上只是我的一些疑问看法,欢迎指正。C 和 PHP 是世界上最好的语言 :)。
#21 楼 @hjleochen 提供一个 form 层主要方便跟 HTTP GET POST,特别是 HTML 表单打交道,少写很多代码。如果你没这个需求比如全 ajax 处理完当然可以不用 form 这一层。
@hjleochen @est 说来说去还是没能解答这个问题啊..大家不能讨论一下吗..
Blocking on calls to external services
@est 你是 V2EX 上那个 est 吗?
#1 楼 @hjleochen cc @alsotang 慢速外部请求调用这个情况太多了,我这边遇到两种 第一种类似查水表,解决方法是用 Sinatra 写了个服务,单独跑,这样就不阻塞网站的进程了,主要还是 Rails 目前还是多进程模型为主,IO 阻塞对于系统吞吐量影响还是挺大 第二种是业务中必须要同步调用外部 API,这种就不好说了,条件允许的情况可以变通业务逻辑,异步化(比如支付,增加支付处理中状态,支付的真实逻辑放在队列中实现),不能变通的,我目前还在思考的方案是启动两个 Unicorn master,其中一个专门负责复杂的业务逻辑(在 Nginx 中配置就好了)