The Apache Thrift software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delphi and other languages.
Thrift 用于实现跨语言之间调用的服务框架,它支持 C++, C#, Cocoa, D, Delphi, Erlang, Haskell, Java, OCaml, Perl, PHP, Python, Ruby, NodeJS, Go, Smalltalk... 非常多热门的语言,可以直接基于写好的接口描述文件 (IDL) 生成目标语言的本地化代码。
我们现在目前的项目至少有 C, Java, Ruby, PHP 期间各种语言有各种不同团队负责不同侧重点的服务。 团队合作的时候,我们用 Thrift 来实现跨语言之间的调用。
所以基于 Thrift 的 Ruby 库实现了一套服务器框架,让我们可以快速构建一个类似 Rails 一样易用、可维护的 Thrift Server,内部非常多的实现都和 Rails 一模一样,你可以完全用 Rails 的使用习惯来开发。
今年的 RubyConf China 2014 上,@罗昕 曾经讲过类似的主题《RailsService: Create microservices with(or without) Rails》,当然此 Gem 有受他的启发
Sails 是从我们的实际项目上面抽出来的,断断续续发布了好几个版本,也解决了 N 多 Real world 环境的问题,比如 Capistrano 部署重启载入的问题,Linux 发送 kill -USR2 $pid 重启的问题等等
打信息:
Processing by UserService#find_user_quota at 2014-12-29 18:36:52 +0800
Parameters: {:req=><ThriftServer::CommonRequest user_id:36, session_id:"afa4b600fd2f8a15baece2e365c0cf6f", ip:"127.0.0.1">}
UserQuota Load (9.3ms) SELECT `user_quota`.* FROM `user_quota` WHERE `user_quota`.`user_id` = 36 LIMIT 1
Completed 200 OK in 13.73ms (DB: 9.3ms)
一些命令
$ sails s
$ sails stop
$ sails restart
$ sails s --daemon
$ sails c
irb> Sails.root
=> #<Pathname:/Users/jason/work/foo>
irb> Sails.root.join("log")
=> #<Pathname:/Users/jason/work/foo/log>
irb> Sails.cache.write("foo", 1)
=> true
irb> Sails.cache.read("foo")
=> 1
irb> reload!