У меня есть сервер 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.