通过另一个rails应用程序获取一个rails应用程序数据的最高效方法是什么?

时间:2011-11-01 19:17:16

标签: ruby-on-rails ruby-on-rails-3 performance ruby-on-rails-3.1

我有两个rails应用程序(现在都在Rails 3.1.1上),它们运行良好。但是,我对两者有依赖关系。应用程序A通过链接到应用程序B的数据。这些链接是自动创建的,但必须通过查找应用程序B的数据来计算它们。我正在使用Ruby 1.9.2和Thin作为Web服务器在Windows 7上工作,这不会改变: - (

我尝试了以下内容:

  • 仅使用RESTful资源,因此定义了一个控制器,称为其操作(get_xml_obj中包含一些参数),从XML中读取所需的值。工作,但每次通话需要0.5s到1s左右。
  • ActiveResource#find取而代之,但效果相同,但效果与以前的解决方案相同。
  • 我已经安装了nginx并对其进行了配置,因此连接是keepalive,因此连接处理应该更快。但是从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个具有相似长度的呼叫(<10ms)。

那么我可以做些什么来调整检索(不直接访问数据库)?您是否知道如何衡量和调整Web服务器和中间件的任何好文档?这些只是个人应用程序,因此无法在体面的服务器上部署它们。我使用缓存来获取检索到的信息,因此随着时间的推移它变得越来越好,但1秒钟太长了,无法等待。在我想要呈现的页面中可能有超过1或2个链接。

1 个答案:

答案 0 :(得分:1)

好的,我终于放弃并实施了以下内容:

  • 将文件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分钟内完成,现在没有任何区别,包括从应用AB没有包含5个链接的链接。

在某个时间点,我想知道在这里使用RESTful资源的缓慢部分是什么......