Forum: Ruby on Rails Routing Error when using "Net::HTTP.start" but doesn't occur

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
D5df9fcd7ef4c3c937435d7d6adeab2a?d=identicon&s=25 Greg Hauptmann (Guest)
on 2007-03-05 05:40
(Received via mailing list)
Hi all,

I'm stuck on a Routing Error I'm getting when calling my application
(App2)
from a test/stub application (App1), however when I enter the same
request
to App2 via the browser I do NOT get this routing issue and it works.

My problem is in more detail (if anyone can help) that:

[1] when I call an action in App2 from App1 I get a ROUTING ERROR,
"Recognition failed for /mycontroller/myaction" - this seems to come
from
App2's inbuilt Rails framework which somehow sees a routing problem and
immediately sends back a "Routing Error" message without ever getting to
my
code within App2.
[2] when I use the browser with same "
http://localhost:3000/mycontroller/myaction" URL (i.e. that App1 seems
to be
correctly producing, although I don't have a HTTP trace mechanism to
100%
prove this) App2 seems to work fine
[3] again I don't see any log info turn up in App2 (as if the rails
framework picked up on the routing error first and then bounced it prior
to
my code getting involved)
[4] some details of my code below

Code Used (which resides in App1 running on port 3001 - it's calling
App2
running on port 3000)
    url = " http://localhost:3000/mycontroller/myaction"
    uri = URI.parse(url)
    response = nil
    Net::HTTP.start(uri.host, uri.port) do |request|
        response = request.post(uri.path, postData)
    end

Note that "response.body" here gives:
<html>
<head>
  <title>Action Controller: Exception caught</title>
   << CUT >>
</head>
<body>
<h1>Routing Error</h1>
<p><pre>Recognition failed for
&quot;/mycontroller/myaction&quot;</pre></p>
</body>
</html>

Browser Test
* Yet when I call the same URL from my browser it works (and doesn't
give
this message).  The URL I use here would be:
      http://localhost:3000/mycontroller/myaction


Any ideas/help?  I can't seem to see what I'm doing wrong.  Any way to
trace
the HTTP coming directly into App2 to see for myself what Rails is
doing?
What about a way to turn up the logging/trace for rails re HTTP?


Thanks in advance
Greg
(TextEdit / MacBook)
82a61255b4090da7d3619f870b0794dc?d=identicon&s=25 James Mead (floehopper)
on 2007-03-05 07:08
(Received via mailing list)
You could print/log debug information from the Dispatcher.dispatch
method
where a ActionController::CgiRequest gets created.

Also note that you are doing a GET in your browser test, but a POST with
Net::HTTP.

--
James.
http://blog.floehopper.org
40db9e75b3f5899258e3bdc0c9210154?d=identicon&s=25 Conrad Taylor (Guest)
on 2007-03-05 07:37
(Received via mailing list)
Hi, are you really posting data to the form location?  If this is
truly the case, you can do something like the following:

BEGIN CODE:

 require 'net/http'
 require 'uri'

 url = " http://localhost:3000/mycontroller/myaction "
 res = Net::HTTP.post_form( URI.parse( url ), post_data )

 puts res.body

END CODE:

Note:  The post data should be represented as a hash.

 Good luck,

-Conrad
D5df9fcd7ef4c3c937435d7d6adeab2a?d=identicon&s=25 Greg Hauptmann (Guest)
on 2007-03-05 08:31
(Received via mailing list)
to give some more detail calling application is my PalPal stub, and it's
making a HTTP call to my application to simulate the PalPal IPN call.
So
all I have in my application is a "handle_IPN" action in my PayPal
controller.  Does this clarify things?

I'll try the "Net::HTTP.post_form" approach instead of "Net::HTTP.start"
then to see if this helps...I don't fully understand the difference.
Perhaps I need to use a Net:HTTP method that simulates a GET rather than
a
POST?  (noting James's point)

Tks
Greg
This topic is locked and can not be replied to.