Я немного борюсь с проблемой с ActiveResource: когда имя хоста разрешено для запроса ActiveResource, но на другом конце нет сервера для возврата информации, значение таймаута ActiveResource не работает. Запрос просто зависает.Переопределение/изменение класса Rails (ActiveResource)
После просмотра кода ActiveResource я понял, что это связано с тем, что базовый объект Net: Http имеет только одно значение времени ожидания: read_timeout. Библиотека Net: Http определяет это как «Секунды ожидания до считывания одного блока (одним вызовом чтения (2)»). Net: Http lib также определяет другое значение тайм-аута open_timeout, которое определяется как «Секунды ожидания до открытия соединения».
Я не уверен, почему open_timeout не задано по умолчанию с значением таймаута, установленным в классе ActiveResource, но после изменения класса ActiveResource :: Connection для включения open_timeout в объекты http, моя проблема была решена!
Я новичок в рельсах, поэтому я не знаю, как наилучшим образом осуществить эту модификацию в моем проекте; Я не хочу просто менять код в моей директории gem. Есть ли способ сделать эти изменения в проекте рельсов? Я видел, что можно загружать классы рельсов из папки/vendor, но все ли они должны быть там, чтобы они работали? Я начал создавать подклассы классов ActiveResource :: Base и ActiveResource :: Connection, но казалось, что, возможно, был более простой способ сделать это, поскольку функция, которая создает экземпляр Net: Http, является частной ... любыми мыслями?
Спасибо за помощь - это именно то, что я хотел! – Ben
По пути - Мне любопытно, почему именно это работает? Метод, который я переопределяю в классе инициализаторов, является частным методом в классе ActiveResource :: Connection, и, тем не менее, это похоже на проблему с w/out? Я не могу найти мало информации о том, как файлы в папке инициализатора влияют на основные классы рельсов. – Ben
файлы инициализатора никоим образом не являются особенными. Их содержимое просто запускается после загрузки среды. В Ruby ничто не мешает вам снова открыть класс и поиграть с частями. Видимость методов - довольно поверхностная концепция в Ruby. Например, вы можете вызвать частный метод для объекта с obj.send (: private_method, ...) – flitzwald