2017-02-16 20 views
0

Я хочу, чтобы результат веб-сервиса (расположенный в том же приложении), на мой взгляд, так что я извлечения его в действии, как:Переход к ссылке в одном приложении рельсам через действие представления контроллера не работает

class MerchantsController < ApplicationController 
    def list 
    @cuisines = HTTParty.get('http://localhost:3000/v1/cuisines') 
    end 
end 

При ударе этого действия как: http://localhost:3000/merchants/list, загрузка занимает слишком много времени и в итоге дает исключение Net::ReadTimeout.

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

class MerchantsController < ApplicationController 
    def list 
    @cuisines = HTTParty.get('http://bogoapi.herokuapp.com/v1/cuisines') 
    end 
end 

Есть ли решение для этого? Если нет, что заставляет это вести себя так?

ответ

0

WEBrick - сервер по умолчанию, встроенный сервер Rails, является сервером с одним потоком. Wiki. Вы делаете один звонок и выполняете другой вызов внутри логики первого запроса. Ваш второй запрос никогда не будет выполнен до завершения первого.

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

+0

Во-первых, я использую рельсы 5, так что не Webrick, его Puma по умолчанию. Во-вторых, в этом случае не имеет значения, является ли герою многопоточным или нет, потому что само приложение работает на «localhost». – Farooq

 Смежные вопросы

  • Нет связанных вопросов^_^