2012-03-27 34 views
6

He estado luchando contra este problema todo el día, y realmente podría necesitar algo de información.Facebook Open Graph de Rails Heroku

que tienen una aplicación Rails (3.1.3) que se ejecuta en Heroku Cedar, tratando de publicar algunas de las acciones de Facebook Open Graph con fb_graph joya (2.4.0).

Este es mi código.

begin 
    app = FbGraph::Application.new(ENV['facebook_app_id']) 
    me = FbGraph::User.me(user.facebook_access_token) 

    logger.info "Facebook: User #{user.name} reviewing game #{game_url(review.game)}" 

    action = me.og_action!(
     app.og_action(:review), 
     :game => game_url(review.game), 
     :content => review.review, 
     :rating => review.rating 
    ) 
rescue Exception => exc 
    logger.error "Failed to publish review #{review.id} to facebook #{user.facebook_auth}" 
    logger.error "Facebook error msg: #{exc.message}" 
end 

Si voy a la página en mi aplicación que intentará ejecutar este código, se producirá un error con el siguiente mensaje.

FbGraph::InvalidRequest (Exception :: Could not retrieve data from URL.) 

Pero, si yo dónde abrir una consola de Heroku, heroku run console y escribe el código a mano, funciona perfectamente.

Mi primer pensamiento fue que game_url(review.game) a quién culpar, pero después de agregar el mensaje de registro, estoy seguro de que devuelve la URL correcta. Y, dado que todo funciona cuando lo ejecuto manualmente a través de la consola heroku, confirma que la URL es accesible y proporciona los datos solicitados.

Cualquier comentario o experiencia con esto es muy apreciado.

+0

has necesitado cambiar ENV [ 'facebook_app_id'] y que incluye el ID de ahí? He tenido problemas con Facebook y las variables de entorno anteriormente. – Ashitaka

+0

Valió la pena intentarlo, pero lamentablemente no tuvo ningún efecto. También intenté agregar el secreto, aunque no debería ser necesario. –

+0

Actualizó fb_graph a la versión 2.4.7 sin efecto. –

Respuesta

11

¡Solucionado!

Realmente estúpido en realidad. Solo tenía un dyno web en mi aplicación Heroku. Como mi único dinamómetro web estaba haciendo la llamada de la API de Facebook, no había ningún dinamómetro para responder a la devolución de llamada de Facebook. Necesitas al menos 2 para que esto funcione.

La razón del código trabajó en heroku consola fue simplemente porque el banco de pruebas web no estaba ocupado manejando mi solicitud.

que puede apartar a ese código para una cola de trabajo en el futuro, ya que parece más adecuado y dejar que un banco de pruebas trabajador manejar la publicación de Facebook.

+0

¡No olvides aceptar tu respuesta! – Ashitaka

+1

Tenga en cuenta que, incluso con dos dynos, puede bloquear si el enrutador envía la solicitud al banco de pruebas incorrecto.He sugerido Unicornio en otra respuesta; otra alternativa es usar una segunda aplicación para implementar la devolución de llamada, aunque no estoy seguro si la gema fb_graph es susceptible de eso. – metadaddy

+0

@metadaddy, Heroku dice que más de un banco de pruebas proporciona más concurrencia. Si tengo dos dynos, ¿por qué está enrutando al mismo banco de pruebas? ¿Qué enrutador envía al banco de pruebas incorrecto? – Tony

0

El siguiente enlace parece sugerir que esto está relacionado tiempo de espera, aunque no hay solución real todavía no se ha dado. facebook "could not retrieve data from URL"

Es posible que desee mantener también un registro de respuestas para el enlace anterior.

+0

Gracias por el enlace. Es bueno ver que no estoy solo. No estoy seguro del tiempo de espera. Se necesitan ~ 400ms para renderizar la página game_url. Eso no debería caso un tiempo de espera ¿verdad? Vale la pena investigar Gracias. –

Cuestiones relacionadas