Facebook Open Graph mit Heroku

Neulich wollte ich mal den Railshoster Heroku ausprobieren. Hier gibts standardmäßig gratis eine 5 MB Datenbank und einen Web-Dyno dazu. Ein Web-Dyno kümmert sich um die HTTP Anfragen und führt den Ruby on Rails Code aus. Für kleine Apps reicht das sicherlich schon aus.

So nun mal zu meiner kleinen App. Mit dieser will ich gerne neue Open Graph Aktivitäten zu der Timeline eines Facebook Benutzers hinzufügen. Wem dies jetzt nichts sagt, der kann gerne mal hier etwas zum Facebook Open Graph lesen.


Kurz gesagt können hiermit Aktivitäten wie: Tom (User) kocht (Action) Spagetti (Object) – erstellt werden.

Um dies in Rails umzusetzten, benutze ich in meiner Applikation das Gem fb_graph. Ein Ruby Wrapper für die Facebook Graph API und den Open Graph. Im Wiki selbst, wird die Verwendung des Open Graph mit fb_graph anhand eines Beispiels nochmal beschrieben.

Zuerst ist die Applikation, welche zuvor bei Facebook erstellt wurde, zu autorisieren und der User zu authentifizieren. Mit og_action kann eine neue Aktivität erstellt werden. Hierfür ist eine Action z.B. „kochen“ und eine URL zu dem Objekt notwendig. Beim Ausführen dieser Methode wird eine Anfrage an Facebook gesendet. Facebook wiederum stellt eine Anfrage an die URL des Objektes. Auf dieser Webseite befinden sich jetzt alle wichtigen Meta-Daten, welche Facebook benötigt. Wie schon aus der Graph API bekannt ist, können in den Meta-Tags Open Graph Protokoll Markups hinterlegt werden, wie z.B. eine URL zu einem Bild:

Facebook parst die Daten und erstellt daraus deine Aktivität auf der Timeline des Benutzers. Das klappt alles soweit ganz gut, nur hatte ich damit auf Heroku einige Probleme.

Lokal ausgeführt wurde von fb_graph eine neue Aktivität in meiner Timeline angelegt. Nur auf Heroku deployed und ausgeführt, bekam ich immer folgende Meldung:

Anfang dachte ich, Facebook kann meine Webseite nicht erreichen. Dies lässt sich mittels dem Graph API Tool ganz einfach testen. Aber alle Daten wurden einwandfrei geparsed und von Facebook erfasst. Nach einigem googeln bin ich auf folgende Frage bei Stackoverflow gestoßen. Hier hatte jemand das selbe Problem mit fb_graph und dem gratis Account von Heroku.

Das Problem hierbei liegt (wie in der Antwort näher erläutert) an dem einen Web Dyno der dem gratis Account zur Verfügung steht. Das FBGraph Gem sendet eine Anfrage an Facebook ab, um eine neue Aktivität zu erstellen. Facebook selbst sendet eine Anfrage an die angegebene URL. Da der Web Dyno noch mit der FBGraph Anfrage beschäftigt ist, kann dieser sich nicht um die FB-Anfrage kümmern. Somit bekommt Facebook einen Timeout und liefert ein „Could not retrieve data from URL“ zurück. Und das FBGraph gem liefert die oben genannte Exception zurück.

Um das Problem zu lösen gibt es nun zwei Möglichkeiten. Die eine wäre, einen zweiten Dyno zu aktivieren. Die Aktivität würde dann erstellt werden, da zwei Requests gleichzeitig verarbeitet werden können. Dieser zweite Dyno kostet jedoch etwas. Wer eine kleine App hat, möchte wahrscheinlich wegen dieser einen Zeile Code jetzt keinen zweiten Dyno bezahlen. Die zweite Möglichkeit wäre, den Open Graph Request in einen Thread auszulagern.

Das sleep hab ich hier noch eingebaut, damit der Aufruf nicht gleich erfolgt. Und siehe da, es wurde eine neue Aktivität auf Facebook erstellt, mit nur einem Web Dyno. Es kann hier sicherlich auch vorkommen, dass die Aktivität trotz des Workarounds nicht angelegt wird. Bei höher frequentierten Anwendungen lohnt sich dann schon ein zweiter Dyno bzw. ein eigener Server mit einem Rails-Setup zu verwenden.

Tom Cz

Bin ein bayerischer SEO und WebDeveloper. ➤ Technical SEO ➤ Google Analytics ➤ Google Tag Manager

Ein Gedanke zu „Facebook Open Graph mit Heroku

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.