重写/修改的Rails类(的ActiveResource)(Overriding/Modifying

2019-10-17 03:04发布

我一直在努力,现在用的ActiveResource的问题了一下:当一个主机名解析为的ActiveResource请求,但没有服务器上的另一端返回的信息,的ActiveResource的超时值不起作用。 请求只是挂起。

审查的ActiveResource代码后,我意识到,这是因为底层网:HTTP对象只有一个超时值设置:read_timeout。 净:HTTP库这个定义为“秒等待,直到读出一个块(由一个读(2)呼叫)”。 净是:http LIB还定义了另一个超时值,open_timeout,其被定义为“秒等待连接被打开,直到”。

我不确定为什么open_timeout默认情况下不与一个类的ActiveResource设定的超时值设置,但修改的ActiveResource :: Connection类包含在HTTP对象open_timeout后,我的问题就解决了!

我是新的轨道,因此我不确定真正让我在这个项目变更的最佳方式; 我不想只是改变我的宝石目录中的代码。 有没有办法让在Rails项目这些修改之有道? 我已经看到了它可能加载从/供应商的文件夹轨类,但是他们都必须有它的工作? 我开始做的ActiveResource :: Base和的ActiveResource ::连接类的子类,但它似乎像也许有这样做的更简单的方法,作为创建网络的功能是:http实例是私人...有什么想法?

Answer 1:

首先,这是你应该到Rails的错误追踪报告问题: https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/

当我有热修复程序像这样的小事情,我通常创建在RAILS_ROOT /配置/初始化的初始化文件,然后重新打开我打算修复类。

class ActiveResource::Base
  # your fix goes here
end

这就是所谓的猴子打补丁,是有点争议。 但我个人认为这是非常残酷的引入一个新的水平到一个没有语义的含义我的代码继承层次。



文章来源: Overriding/Modifying Rails Class (ActiveResource)