Каков наиболее эффективный способ получения данных одного приложения rails другим приложением rails? - PullRequest
0 голосов
/ 01 ноября 2011

У меня есть два приложения rails (теперь оба на Rails 3.1.1), и они прекрасно работают.Тем не менее, у меня есть зависимость между ними.Приложение A использует данные приложения B путем ссылки на него.Эти ссылки создаются автоматически, но они должны быть рассчитаны путем поиска данных приложения B.Я работаю на Windows 7 с Ruby 1.9.2 и Thin в качестве веб-сервера, и это не изменится: - (

Я пробовал следующее:

  • Использовать толькоРесурс RESTful, так называемый контроллер, называемый его действием (get_xml_obj с некоторыми параметрами в нем), считывает необходимые значения из XML. Сработало, но для каждого вызова требуется от 0,5 с до 1 с.
  • Замененоон ActiveResource # find , который также работал, но с той же производительностью, что и предыдущее решение.
  • Я установил nginx и настроил его так, чтобы соединение оставалось активным, чтобыобработка соединения должна быть намного быстрее. Но не заметил никакой разницы при вызове B из A.

Когда я сравниваю затраченное время, это типичные примеры (здесь с 4 ссылками в одномвеб-страница):

Приложение A:

Started GET "/tasks/search_task/1803" for 127.0.0.1 at 2011-11-02 14:11:04 +0100

  Processing by TasksController#search_task as HTML
  Parameters: {"id"=>"1803"}
Rendered tasks/_tooltip.html.haml (4529.5ms)
Completed 200 OK in 4532ms (Views: 4527.5ms | ActiveRecord: 2.0ms)
cache: [GET /tasks/search_task/1865] miss

Приложение B:

cache: [GET /service/get_xml_obj?key=notice&value=rails] miss

Started GET "/service/get_xml_obj?key=notice&value=rails" for 127.0.0.1 at 2011-
11-02 14:11:05 +0100
  Processing by ServiceController#get_xml_obj as */*
  Parameters: {"key"=>"notice", "value"=>"rails"}
Completed 200 OK in 6ms (Views: 3.0ms | ActiveRecord: 1.0ms)

и 3 других вызова аналогичной длины (<10 мс). </p>

Так что я могу что-то сделать, чтобы настроить ретrieval (без прямого доступа к базе данных)?Знаете ли вы какую-либо хорошую документацию о том, как измерить и настроить веб-сервер и промежуточное ПО?Это только личные приложения, поэтому их невозможно развернуть на приличном сервере.Я использую кеш для извлеченной информации, так что со временем она улучшается, но 1 секунда - это слишком много, чтобы ждать.И на странице, которую я хочу отобразить, может быть более 1 или 2 ссылок.

1 Ответ

1 голос
/ 02 ноября 2011

Хорошо, я наконец сдался и реализовал следующее:

  • Добавлен файл b.rb в мою директорию models в приложении A.
  • Включены все необработанные модели, где базовые модели (используемые sti) определены так:

    class Notice < ActiveRecord::Base
      self.establish_connection(
        :adapter => "sqlite3",
        :database  => "../b/db/dev.db"
      )
    end
    ...
    
  • Теперь я могу спросить: Notice.where(:key => 'rails'), что приводит к реальному объекту модели Rails.

Все это было реализовано примерно за 20 минут, и теперь нет никакой разницы в том, чтобы не включать ссылку из приложения A на B для включения 5 ссылок.

В какой-то момент я хотел бы знать, какова медленная часть использования ресурсов RESTful здесь ...

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