Можно ли использовать open-uri в разных стойках?

В настоящее время у меня есть веб-приложение Sinatra и API Grape, идея которого заключается в том, чтобы реализовать приложение Sinatra таким образом, чтобы веб-приложение стало еще одним потребителем API.

В моем config.ru у меня есть это:

run Rack::Cascade.new [API, Application]

API такое приложение "Виноград" Application это приложение Синатра. Я использую open-uri, чтобы попытаться получить JSON из API Grape в маршруте Синатры. Я использую тонкий. Я опускаю /uri после номера порта для удобства чтения, приложения Grape & Sinatra работают независимо, я объясню позже

open("http://localhost") возвращает:

#<StringIO:0x007fbeab1b2e68
@base_uri=#<URI::HTTP:0x007fbeab1d47e8 URL:http://localhost>,
@meta=
 {"content-type"=>"text/html; charset=utf8",
  "x-pow-template"=>"welcome",
  "date"=>"Fri, 06 Sep 2013 07:29:15 GMT",
  "connection"=>"keep-alive",
  "transfer-encoding"=>"chunked"},
@status=["200", "OK"]>

Однако если я open("http://localhost:9292") приложение зависает. Я чувствую, что, может быть, что-то блокирует ввод-вывод, как, например, ожидание соединения с самим собой, но я не совсем уверен, что происходит под капотом, чтобы быть уверенным.

Если я укажу на это, раскрутите project.dev а затем раскрутить его rackup поэтому у меня есть два экземпляра, которые я могу использовать open("http://project.dev/what/ever/url/i_need") & Отлично работает. Так что проблема, кажется, где-то в том, чтобы указать open-uri на себя... Я думаю...

Это из-за Rack::Cascade? это проблема с thin? или, может быть, с open-uri? Это просто неправильный подход к этой проблеме?

Я открыт практически для любого решения, однако я бы предпочел сделать его как можно более простым, с минимальными внешними требованиями, поскольку я намерен часто использовать этот шаблон.

Дайте мне знать, если потребуется какая-либо дополнительная информация, и я сделаю все возможное, чтобы предоставить ее.

1 ответ

Похоже, что sinatra и open-uri пересекаются, так как я столкнулся с одной и той же проблемой с sinatra 1.4.4 на разных серверах (puma, webrick, thin).

Моим решением было переключиться на curb и это решило проблему.

Другие вопросы по тегам