2013-07-08 4 views
2

Après beaucoup de frustration à essayer de comprendre moi-même, je suis atteint pour SO gars (vous!) Pour me aider à trouver cette erreur redoutable:fin du fichier atteint EOFError (Databasedotcom + Rails + Heroku)

Message: end of file reached EOFError Backtrace: ["/app/vendor/ruby-1.9.3/lib/ruby/1.9.1/openssl/buffering.rb:174:in `sysread_nonblock

Contexte: Mon application est une application Rails 3 hébergée sur Heroku et 100% back-end. Il utilise les travailleurs Redis/Resque pour traiter la charge utile reçue de Salesforce à l'aide de l'API REST de Chatter. : Contrairement à d'autres erreurs similaires d'EOF dans HTTPS/OpenSSL dans Ruby, mon erreur est très aléatoire (puisque je ne peux pas encore prédire quand cela arrivera).

Usual Suspects: L'erreur a été remarqué assez souvent lorsque je tente de créer 45 travailleurs Resque, et essayer de synchroniser les données de 45 différentes connexions API REST Salesforce Chatter à la fois! Il est si fréquent que mon traitement échoue à 20% ou plus du total et tout cela à cause de cette erreur.

Remedy étapes: J'utilise bijou Databasedotcom qui utilise le protocole HTTPS et suit toutes les étapes nécessaires pour se connecter pour créer une connexion HTTPS sain d'esprit. Alors ...

  • SSL défini dans le protocole HTTPS - vérifié
  • URI Encode - vérifié
  • Ruby 1.9.3 - vérifié
  • HTTP délai d'attente de lecture est réglé sur 900 (15 minutes)
  • Je retenter cette erreur EOF MAX de 30 fois après avoir dormi 30 secondes avant chaque nouvelle tentative! Néanmoins, il échoue certaines des données.

Une aide ici s'il vous plaît?

+0

Je rencontre le même problème. Cela vous dérangerait-il de partager ce que vous avez fini par faire? – oregontrail256

Répondre

0

Avez-vous considéré que Salesforce n'aimait pas autant de connexions à la fois à partir d'une source unique et que vous étiez bloqué par un logiciel anti-DDOS?

En outre, la définition de ces longs délais d'expiration est tout à fait inutile. Si la connexion échoue, déposez-la et reprogrammez-en une nouvelle vous-même. C'est ce que Resque fait bien, il va ajouter ces temps d'attente si elle continue à avoir des problèmes ...

+0

Merci Hugo, pour DDOS chez Salesforce! Mais je ne pouvais pas comprendre comment puis-je "Si la connexion échoue, déposez-le et reprogrammer un nouveau vous-même." fais ça? –

+0

Si vous mettez la connexion dans la tâche Resque et que Resque l'action échoue (quand c'est le cas, bien sûr), Resque replanifiera la tâche elle-même, et bien sûr une nouvelle tentative de connexion sera faite. –

Questions connexes