Можно ли использовать 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
и это решило проблему.