Приложение Heroku: RestClient :: InternalServerError - PullRequest
0 голосов
/ 10 августа 2011

Я создал веб-приложение на myapp.heroku.com, где «myapp» - это случайное имя, сгенерированное heroku.Когда я ударил его с помощью моего веб-браузера, он работает.Когда я нажимаю на него с помощью Ruby Rest-Client (gem rest-client v1.6.3) следующим образом:

irb(main):024:0> response=RestClient.get "http://myapp.heroku.com"

Выдает следующее:

RestClient::InternalServerError: 500 Internal Server Error
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/rest-client-    1.6.3/lib/restclient/abstract_response.rb:48:in `return!'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/rest-client-1.6.3/lib/restclient/request.rb:228:in `process_result'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/rest-client-1.6.3/lib/restclient/request.rb:176:in `block in transmit'
    from C:/Ruby192/lib/ruby/1.9.1/net/http.rb:627:in `start'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/rest-client-1.6.3/lib/restclient/request.rb:170:in `transmit'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/rest-client-1.6.3/lib/restclient/request.rb:64:in `execute'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/rest-client-1.6.3/lib/restclient/request.rb:33:in `execute'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/rest-client-1.6.3/lib/restclient.rb:68:in `get'
    from (irb):24
    from C:/Ruby192/bin/irb:12:in `<main>'

Когда я используютот же клиент с более известными URL, такими как "http://www.google.com"," или "http://www.heroku.com",", работает нормально, загружается содержимое URL, и все хорошо.Когда я использую тот же клиент с версией приложения, работающей на "http://localhost:3000",, он тоже работает нормально.

Я что-то упустил в своем клиенте rest-client, который не позволяет ему ПОЛУЧИТЬ данные из приложения, размещенного наheroku.com?

============ РЕДАКТИРОВАТЬ ==== дополнительную информацию ===========

После сна на немЯ попробовал:

irb> require 'net/http'
irb> NET::HTTP.get_print URI.parse "http://myapp.heroku.com"

Работало нормально.

Ответы [ 2 ]

0 голосов
/ 10 августа 2011

Я дурак.

После проверки «логов героки» я обнаружил в своем коде исключение, которое вызвало ошибку 500. Исключение произошло из-за различий в приведении типов между базой данных PG в heroku и моей локальной базой данных SQLite3. Как только я это исправил, все прошло хорошо. Я подозреваю, что ошибка 500 также привела к тому, что мой сайт был временно недоступен, поэтому поддомен, на котором размещен мой сайт, ничего не возвращал.

Мораль истории? отдых-клиент работает. Героку работает. Rest-client (IMO) не должен выдавать исключения для 500, а просто возвращать код ответа HTTP и позволить приложению справиться с этим. Однако, если я ною больше, мне также придется раскошелиться и исправить ...

0 голосов
/ 10 августа 2011

Здесь может быть несколько причин;

Если вы используете один dyno, он отправляет запрос, но затем возвращается на сайт, но нет доступного dyno для обработки запроса, поэтому время ожидания истекает.

Могут быть ситуации, когда сервер не может связаться с самим собой по своему внешнему адресу, но я не думаю, что это, скорее всего, так, скорее проблема dyno?

Джон.

...