flexaccess
@flexaccess
Намерен работать программистом

Почему локальный Rails Server виснет при использовании внутреннего API?

Есть приложение на локальном сервере с API, которое по адресу ./api/v1/search/query отдает json файл.
Попытался с корневой страницы отправить запрос:
Net::HTTP.get(URI.parse(query))
Дальше когда как - любо страница начинает вечно грузится и показывать белый экран, либо покажет результат, а при следующем запросе та же история. Собственно, вопрос, что не так делаю и можно ли в принципе так делать?
  • Вопрос задан
  • 304 просмотра
Решения вопроса 1
b0nn1e
@b0nn1e
Alcohol & Ruby on Rails
Локально скорее всего приложение запушено в один поток, т.е пока один запрос не отработает до конца, второй ожидает.
У вас получается что первый запрос создает второй запрос, и первый запрос ждет пока завершиться второй запрос.
Но второй запрос не начнет выполняться пока не завершится первый. И приложение падает по таймауту.

Запустите еще один инстанс на другом порту и с другим pid
rails s -p 3001 -P tmp/pids/server2.pid
и сообтвественно адресс будет localhost:3001/...

Или попробуйте использовать в качестве вебсервера юникорн/пассенжер или типа того.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
2ord
@2ord
Скорее всего, приложение не "виснет", а просто долго ожидает ответ по сети и в конце-концов получит ошибку Timeout::Error, которую надо уметь обработать.

Нужно убедиться что значение переменной query - это вообще корректный адрес http://... и что http сервис доступен по данному URL. Если этот сервис находится за пределами локальной подсети, то нужно учесть и задержки сети и объёма передаваемых данных.
Также одна из детских ошибок в приложении обращаться к самому себе, то есть рекурсивно. В таком случае приложение никогда не выйдет из рекурсии и в итоге браузер выдаст ошибку о недоступности приложения по истечении времени.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы