ruby-on-rails logging activeresource

ruby on rails - ¿Cómo se registra la URL que utiliza ActiveResource?



ruby-on-rails logging (3)

Me acabo de encontrar con este mismo problema y encontré esta publicación cuando buscaba respuestas. Lo que encontré, que resultó ser útil, es el método collection_path en ActiveResource :: Base. Entonces, por ejemplo, digamos que tiene el siguiente recurso:

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

Si vas a la consola de rieles, aquí hay algunos ejemplos de la salida:

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

Esto debería proporcionarle exactamente lo que necesita para determinar cómo ActiveResource está traduciendo su solicitud en una URL.

Rails ActiveResource es impresionante ... excepto por una cosa: por lo que puedo decir, no hay manera de ver qué URL está usando detrás de escena. Por ejemplo, digamos que tengo un ActiveResource llamado Issue, para un servicio web en myIssues.com/issues.xml. Si lo hago:

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

Espero que ActiveResource haga una llamada a:

myIssues.com/issues.xml?page=2

... pero en realidad no lo sé. Por lo que sé, ActiveResource podría haber decidido que no le gusta la palabra "página", por lo que en realidad está usando:

myIssues.com/issues.xml?mod_page=2

Esto hace que la depuración sea difícil. En este momento tengo una situación en la que, si voy a la URL, creo que está utilizando ActiveResource, funciona bien. Sin embargo, cuando realmente uso ActiveResource, no funciona. Ver la URL que está obteniendo sería de gran ayuda para esto, así que ...

¿Alguien sabe una manera de registrar (o de otro modo producir); si hay algún método resource.url que también funcione bien) las URL que ActiveResource utiliza para hacer su trabajo?


Si agrega la siguiente línea a su archivo environment.rb , al menos registrará las solicitudes para que sepa que las URLs ActiveResource están golpeando:

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

Todavía estoy buscando una mejor solución que me muestre la respuesta y los datos publicados para actualizar las llamadas, pero al menos este es un paso en la dirección correcta. Realmente no estoy seguro de por qué ActiveResource tiene un registrador separado para empezar, pero eso es otra cuestión.


Para obtener información detallada de inicio de sesión para ActiveResource, debe aplicar el método de solicitud dentro de la gema ( method .

coloque los siguientes archivos dentro de config/initializers obtendrá el método http, ruta, cuerpo de solicitud, hedaers de solicitud

El cuerpo de la respuesta y el encabezado ya están ahí si lo necesitas doc

config / initializers / activeresource_patch.rb

module ActiveResource class Connection private def request(method, path, *arguments) result = ActiveSupport::Notifications.instrument("request.active_resource") do |payload| payload[:method] = method payload[:request_uri] = "#{site.scheme}://#{site.host}:#{site.port}#{path}" payload[:request_path] = path payload[:request_body] = arguments[0] payload[:request_headers] = arguments[1] payload[:result] = http.send(method, path, *arguments) end handle_response(result) rescue Timeout::Error => e raise TimeoutError.new(e.message) rescue OpenSSL::SSL::SSLError => e raise SSLError.new(e.message) end end end

config / initializers / activeresource_logger.rb

Rails.application.configure do def activeresource_logger @activeresource_logger ||= Logger.new("#{Rails.root}/log/activeresource_logger.log") end ActiveSupport::Notifications.subscribe(''request.active_resource'') do |name, start, finish, id, payload| if Rails.env.development? activeresource_logger.info("====================== #{start} : #{payload[:method].upcase} ======================") activeresource_logger.info("PATH: #{payload[:request_path]}") activeresource_logger.info("BODY: #{payload[:request_body]}") activeresource_logger.info("HEADERS: #{payload[:request_headers]}") # activeresource_logger.info("STATUS_CODE: #{payload[:result].code}") # activeresource_logger.info("RESPONSE_BODY: #{payload[:result].body}") end end end