При использовании HTTParty происходит сбой Sinatra
Я пытаюсь использовать HTTParty для выполнения HTTP-запроса в одном приложении Sinatra. Я могу успешно выполнить один и тот же запрос вне приложения Sinatra, но когда он выполняется внутри приложения, я всегда получаю одно и то же исключение:
2013-09-08T16:04:44.738207+00:00 app[web.1]: [2013-09-08 16:04:44] ERROR NoMethodError: undefined method 'status=' for #<HTTParty::Response:0x007f17c050dd70>`
2013-09-08T16:04:44.837777+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/sinatra-1.4.3/lib/sinatra/base.rb:225:in `status'
2013-09-08T16:04:44.936617+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/sinatra-1.4.3/lib/sinatra/base.rb:1080:in `handle_exception!'
2013-09-08T16:04:45.039513+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/sinatra-1.4.3/lib/sinatra/base.rb:1062:in `block in dispatch!'
2013-09-08T16:04:45.139212+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/sinatra-1.4.3/lib/sinatra/base.rb:1041:in `block in invoke'
2013-09-08T16:04:45.238557+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/sinatra-1.4.3/lib/sinatra/base.rb:1041:in `catch'
2013-09-08T16:04:45.338714+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/sinatra-1.4.3/lib/sinatra/base.rb:1041:in `invoke'
2013-09-08T16:04:45.437306+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/sinatra-1.4.3/lib/sinatra/base.rb:1062:in `rescue in dispatch!'
2013-09-08T16:04:45.536146+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/sinatra-1.4.3/lib/sinatra/base.rb:1069:in `dispatch!'
Остальная часть трассировки стека не имеет значения. Я уверен, что запрос заканчивается успешно. Точный код, который выполняет запрос, выглядит следующим образом:
@response = HTTParty.get("https://foursquare.com/oauth2/access_token",
:query => {:client_id => settings.client_id,
:client_secret => settings.client_secret,
:grant_type => "authorization_code",
:redirect_uri => settings.redirect_uri,
:code => @code})
Похоже, Синатра пытается спасти какое-то исключение, а затем вызывает status
Метод по результату HTTP-запроса я выполнил с помощью HTTParty.
Так что было бы здорово понять, что именно происходит, и почему Синатра даже сделал это.
Заранее большое спасибо за ваши ответы.
1 ответ
Проблема была в имени переменной, используемой для хранения ответа: @response
зарезервировано для внутренних целей Синатры. Спасибо @eljojo за указание на это.
https://github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L858