Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you log the URL ActiveResource uses?

Tags:

Rails ActiveResource is awesome ... except for one thing: as far as I can tell, there is no way to see what URL it is using behind the scenes. For instance, let's say I have an ActiveResource called Issue, for a webservice at myIssues.com/issues.xml. If I do:

Issue.find(:all, :params => {:page => 2}) 

I would expect that ActiveResource would make a call to:

myIssues.com/issues.xml?page=2 

... but I don't actually know that. For all I know, ActiveResource could have decided it doesn't like the word "page", so it's actually using:

myIssues.com/issues.xml?mod_page=2 

This makes debugging difficult. Right now I've got a situation where, if I go to the URL I think ActiveResource is using, it works just fine. However, when I actually use ActiveResource, it doesn't work. Seeing the URL it's GETing would be immensely helpful in this, so ...

Does anyone know a way to log (or otherwise output; if there's some resource.url method that would work great too) the URL(s) that ActiveResource uses to do its thing?

like image 409
machineghost Avatar asked Sep 08 '10 01:09

machineghost


People also ask

What is ActiveResource in Ruby?

Automated mappingTo map resources to Ruby objects, Active Resource only needs a class name that corresponds to the resource name (e.g., the class Person maps to the resources people, very similarly to Active Record) and a site value, which holds the URI of the resources. class Person < ActiveResource::Base self.

What are Active Resource?

Active Resource is a wrapper for REST web services made in Ruby that can be used in Ruby on Rails. It allows you to map external resources to ActiveRecord-like Ruby objects. It needs a class/model to represent the resource and a site value that will contain the URI for the resource. class Post < ActiveResource::Base.


2 Answers

I just ran into this same exact issue, and came across this post as I was looking for answers. What I did find, that proved useful, is the collection_path method on ActiveResource::Base. So for example, let's say you have the following resource:

class UserPost < ActiveResource::Base     self.site = "http://someApp.com/user/:user_id"     self.element_name = "post" 

If you go to the rails console, here are some examples of the output:

>> UserPost.collection_path "/user//post" >> UserPost.collection_path(:user_id => 5) "/user/5/post 

This should provide you with exactly what you need to determine how ActiveResource is translating your request into a URL.

like image 36
zwickilton Avatar answered Jan 23 '23 17:01

zwickilton


If you add the following line to your environment.rb file, it will at least log the requests so you know that URLs ActiveResource is hitting:

ActiveResource::Base.logger = ActiveRecord::Base.logger 

I'm still searching for a better solution that shows me the response and the data posted to update calls, but at least this is a step in the right direction. I'm really not sure why ActiveResource has a separate logger to start with, but that's another matter.

like image 61
Jeff Whitmire Avatar answered Jan 23 '23 17:01

Jeff Whitmire