AJAX和Rails:两个堆栈还是一个堆栈?

时间:2010-11-01 03:14:51

标签: ruby-on-rails ajax eventmachine

大多数Web应用程序都是非常标准的CRUD。我需要一些数据在创建时推送到客户端。是否值得为AJAX运行一个单独的,更轻量级的堆栈(如Sinatra或EventMachine)?

如果我运行一个堆栈,我将有Rails的开销。这可能需要更多的Rails进程/服务器,因此如何在没有数据库查询的情况下进行通信? ZeroMQ?最后,Rails是否适合处理数百个并发连接?

如果我运行两个堆栈,我需要复制授权逻辑。

哪种方法对你有用?

1 个答案:

答案 0 :(得分:1)

在Rails 3中,您可以使用新的路由语法轻松挂接Rack应用,并继承ActionController::Metal的控制器或仅定义self.call

拥有read(或观看)Railscast#222并查看wycats' blog(请参阅下面的示例摘录)。

如果你走下这条赛道,你已经意识到了你需要处理的其他情况,所以在遇到它之前一定要确保它是必要的。在服务器上投入美元比在程序员上投入更便宜 - 硬件和带宽非常便宜。

我个人认为这种情况属于“过早优化”,除非你的应用已经在运行并且因为流量过大而窒息。


一些很好的例子:

# config/routes.rb
# Hook in Sinatra
root :to => HomeApp
# Write your own barebones Rack compatible code
match "/processes" => ProcessesApp
# Even specify an inline proc
match "/heartbeat", :to => proc {|env| [200, {}, ["App is running"]] }

# /lib/home_app.rb
class HomeApp < Sinatra::Base  
  get "/" do  
    "Hello from Sinatra"  
  end  
end  

# lib/processes_app.rb
class ProcessesApp  
  def self.call(env)  
    [200, {}, [`ps -axcr -o "pid,pcpu, pmem, time, comm"`]]  
  end  
end