Как вызвать действие контроллера из другого контроллера в памяти? - PullRequest
1 голос
/ 04 марта 2011

У меня есть сервер rails, который обслуживает мобильных клиентов (родной) и клиент на основе браузера. Большая часть трафика поступает от клиента на основе браузера. Клиент на основе браузера проходит через сервер промежуточных рельсов для получения просмотров. Центральный сервер предоставил сервисы на основе REST.

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

Система находится в производстве за последние 8 месяцев. Недавно, во время одного из упражнений по настройке производительности, мы заметили, что затраты на сериализацию / десериализацию XML очень высоки для связи ActiveResource. Поэтому мы пытаемся разместить промежуточный сервер и контроллеры центрального рельсового сервера в экземпляр сервера rails.

Я могу переписать контроллеры Intermediary для непосредственного использования моделей. Этот подход требует переписывания большого количества кода, и я потеряю все проверки авторизации, осуществляемые через центральные контроллеры.

Я пытаюсь выяснить, как вызывать контроллеры центрального сервера из контроллера промежуточного сервера без затрат на сериализацию / десериализацию. В идеале я хотел бы, чтобы существующие центральные контроллеры возвращали объект в памяти, а не строку 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...