I’m having trouble calling a model’s show path from within a create controller.
I’m using the Koala gem in a Rails 3.2 app. I’m trying to publish to Facebook’s open graph automatically when a User creates a particular record type.
I have a page set up with all the required FB meta tags.
I can run the Koala methods from the console and everything works fine.
But if I try to run this from the controller I get an error.
My controller looks like this:
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
When I create a record, my logs show:
Koala::Facebook::APIError (HTTP 500: Response body: {"error":{"type":"Exception","message":"Could not retrieve data from URL."}}):
If I edit the controller to use a static url for testing, everything works fine.
...
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" )
...
Why can’t I pass the record’s url to FB from within the create controller using fb_model_url(@fb_model)?
I eventually got to the bottom of this. It’s actually a really frustrating issue, as there is no indication that this is the problem in any logs or elsewhere.
The problem was that I was deploying/ testing on Heroku, and only had 1 web dyno running. My app was unable to handle both the Facebook request and the post/ get simultaneously, causing the error.
This has been addressed in another question Facebook Open Graph from Rails Heroku. It’s really not what I was expecting, and I didn’t come across this question in any of my earlier searching. Hopefully this can help someone else.
I solved the issue by switching from thin to unicorn.