¿Cómo se llama a la url de presentación de un modelo desde un controlador de creación de Rail?
Frecuentes
Visto 392 equipos
2
Tengo problemas para llamar a la ruta de presentación de un modelo desde un controlador de creación.
Estoy usando la gema Koala en una aplicación de Rails 3.2. Estoy tratando de publicar en el gráfico abierto de Facebook automáticamente cuando un usuario crea un tipo de registro en particular.
Tengo una página configurada con todas las metaetiquetas de FB requeridas.
Puedo ejecutar los métodos de Koala desde la consola y todo funciona bien.
Pero si trato de ejecutar esto desde el controlador, aparece un error.
Mi controlador se ve así:
def create
@fb_model = current_user.fb_models.build(params[:fb_model])
if @fb_model.save
Koala::Facebook::API.new(app_token).put_connections( current_user.fb_uid, "namespace:action", :object => fb_model_url(@fb_model) )
respond_to do |format|
format.html { redirect_to(@fb_model, :notice => 'Successfully created.') }
format.xml { render :xml => @fb_model, :status => :created, :location => @fb_model }
end
else
respond_to do |format|
format.html { render :action => "new" }
format.xml { render :xml => @fb_model.errors, :status => :unprocessable_entity }
end
end
end
Cuando creo un registro, mis registros muestran:
Koala::Facebook::APIError (HTTP 500: Response body: {"error":{"type":"Exception","message":"Could not retrieve data from URL."}}):
Si edito el controlador para usar una URL estática para probar, todo funciona bien.
...
if @fb_model.save
Koala::Facebook::API.new(app_token).put_connections( current_user.fb_uid, "namespace:action", :object => "http://myapp.com/fb_model/2" )
...
¿Por qué no puedo pasar la URL del registro a FB desde dentro del controlador de creación usando fb_model_url(@fb_model)
?
3 Respuestas
3
Eventualmente llegué al fondo de esto. En realidad, es un problema realmente frustrante, ya que no hay indicios de que este sea el problema en ningún registro o en otro lugar.
El problema era que estaba implementando/probando en Heroku, y solo tenía 1 dinamómetro web ejecutándose. Mi aplicación no pudo manejar la solicitud de Facebook y la publicación/obtención simultáneamente, lo que provocó el error.
Esto se ha abordado en otra pregunta. Facebook Open Graph de Rails Heroku. Realmente no es lo que esperaba, y no encontré esta pregunta en ninguna de mis búsquedas anteriores. Esperemos que esto pueda ayudar a alguien más.
Resolví el problema cambiando de delgado a unicornio.
contestado el 23 de mayo de 17 a las 11:05
0
la compilación finaliza cuando se guarda el modelo principal y no parece estar operando en un modelo principal.
Creo que realmente quieres esto:
@fb_model = current_user.fb_models.new(params[:fb_model])
También parece que llamas a @fb_model.save dos veces, lo cual es incorrecto.
contestado el 03 de mayo de 12 a las 11:05
0
Gracias por publicar sus hallazgos: he estado lidiando con este problema durante los últimos días y no me habría dado cuenta. Entonces, cuando simplemente aumentó su carga de dinamómetro, ¿ya no tuvo este error? Estaba a punto de usar el SDK de Javascript a pesar de que mis devoluciones de llamada 'put_connections' funcionan en la consola heroku.
contestado el 11 de mayo de 12 a las 00:05
Hola John, siento tu dolor. ¡Esto me hizo tirarme de los pelos! Como primer paso, aumenté el número de dinamómetros en Heroku. Esto hizo que las cosas funcionaran. Como una solución más rentable, cambié Thin por Unicorn, que maneja de manera efectiva las solicitudes en cola/simultáneas. Bajo Unicorn pude reducir mis dinamómetros a 1, y aún tengo este trabajo. Esto ahora funciona perfectamente para mí en un entorno de ensayo, todavía tengo que probarlo bajo cargas significativas. - andy harvey
En serio, casi dos días completos de probar todas las permutaciones que se me ocurrieron. Iba a preguntarte cómo lo hiciste; Gracias por la sugerencia. Voy a investigar Unicornio. - John C
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ruby-on-rails koala or haz tu propia pregunta.
Gracias @isótopo. Intenté usar new en lugar de build, pero sigo recibiendo un error de URL. He actualizado mi pregunta anterior. Gracias por cualquier otra idea que pueda tener. - andy harvey
No estoy seguro, necesitaría tener un loko exactamente en lo que fb_model_url está devolviendo, ¿incluye el protocolo, por ejemplo? Probaría a mitad de camino y vería si eso funciona:
:object => "http://myapp.com/fb_model/#{@fb_model.id}"
- Tom Dunninghola isótopo, gracias por ayudar. Lo siento, estoy siendo lento, ¿qué quieres decir con "¿incluye el protocolo?" Si presento fb_model_url como texto, es la URL correcta. El protocolo (¿Facebook?) se define a través de la función Koala::Facebook::API, y luego FB extrae información de las metaetiquetas de FB en el encabezado de la página de destino. Probaré tu sugerencia a mitad de camino y te informaré. ¡¡Gracias!! - andy harvey
Protocolo de URL, ya sea 'http://' o 'https://' si falta, entonces podría pensar que es un enlace relativo. - Tom Dunning
Gracias @isótopo. Sus sugerencias me ayudaron a depurar esto. ¡El problema no estaba cerca de lo que pensé que era! Publicaré una respuesta con detalles. - andy harvey