如何从内存中的另一个控制器调用控制器操作?

时间:2011-03-04 02:40:48

标签: ruby-on-rails

我有一个为移动客户端(本机)和基于浏览器的客户端提供服务的rails服务器。大多数流量来自基于浏览器的客户端。基于浏览器的客户端通过中间rails服务器来获取视图。中央服务器公开了基于REST的服务。

[ Iphone                                              +---------------+
  Blackberry                                          |               |
  Android    ]<-------------------------------------->|  Central Rails|
                                                      |  Server       |
                                                      |               |
[ Browser    ]<------->[intermediary server]<-------->|               |    
                                                      +---------------+

系统在过去8个月内投入生产。最近,在一次性能调优练习中,我们注意到ActiveResource通信的XML序列化/反序列化成本非常高。所以我们试图共同定位中间服务器和中央rails服务器控制器 rails服务器实例。

我可以重写中间控制器以直接使用模型。这种方法需要重写大量代码,我将放弃所有强制执行的授权检查 中央控制器。

我试图弄清楚如何从中间服务器控制器调用中央服务器控制器,而不会产生序列化/反序列化成本。 理想情况下,我希望现有的中央控制器返回内存对象而不是XML字符串。

例如:

中央控制器:

class ActiveRecord::Base
  def to_ar
    self
  end
end

class UserController         
  def show
    respond_to do |format|
      format.xml  { render :xml  => @user }
      format.json { render :json => @user }
      format.ar   { render :ar   => @user }
    end    
  end
end     

中央控制器:

app.get '/users/1.ar'
@user = app.response.body

基本上,我试图模仿ActionController :: IntegrationTest类的行为,将实际的ActiveRecord对象作为主体。

任何指示/建议都将受到高度赞赏。

PS :我在Rails 2.3.9上。

0 个答案:

没有答案