2013-07-21 14 views
5

İşlemsel e-postayı program aracılığıyla göndermek için Ruby'de Mandrill-api kullanıyorum.Mandrill-api Excon :: Hatalar :: SocketError

Ben

mandrill ||= Mandrill::API.new const(:API)[:MANDRILL_APIKEY] 
... (constructing the message, content, etc) 
mandrill.messages.send_template templ, template_content, message, true 

sorun üretimde çalışırken, bir süre kez aşağıdaki hatayı döndürür, benim raylar app aşağıdaki satırı (daha fazla veya daha az) var.

Excon::Errors::SocketError (EOFError (EOFError)): 
app/mailers/mailer.rb:24:in `send' 
.... 

nasıl Bu sorunu çözmek için hiçbir fikrim yok. Birisi bana hata ayıklama yaklaşımı konusunda ışık tutabilirse, bunu takdir ediyorum.

Taşlar Bilgi:

  • mandrill-api (1.0.33)
  • excon (0.16.10)

Üretim env:

sudo bundle exec rake RAILS_ENV=production about 


About your application's environment 
Ruby version    1.9.3 (x86_64-linux) 
RubyGems version   1.8.11 
Rack version    1.4 
Rails version    3.2.13 
Active Record version  3.2.13 
Action Pack version  3.2.13 
Active Resource version 3.2.13 
Action Mailer version  3.2.13 
Active Support version 3.2.13 
Middleware    Rack::Cache, Rack::Lock, #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x00000001e72330>, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, Rails::Rack::Logger, ActionDispatch::ShowExceptions, ActionDispatch::DebugExceptions, ActionDispatch::RemoteIp, ActionDispatch::Callbacks, ActiveRecord::ConnectionAdapters::ConnectionManagement, ActiveRecord::QueryCache, ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, ActionDispatch::Flash, ActionDispatch::ParamsParser, ActionDispatch::Head, Rack::ConditionalGet, Rack::ETag, ActionDispatch::BestStandardsSupport 
Environment    production 
Database adapter   mysql2 

Çalıştığı yer:

Apache Sunucusu: Apache /2.2.22 (Ubuntu)

Yolcu: O bir EOF hata var ve aralıklı olduğu göz önüne alındığında, bunun sona erdikten açık soketi tutarak bir ilgisi olabilir 3.0.14

+0

Üretim ortamınızla ilgili bazı bilgileri sağlayabiliyorsanız, size yardımcı olmak çok daha kolay olacaktır. – tyler

+0

tyler, eklenen üretim env. Hata ayıklamaya yardımcı olacak belirli bir bilgi parçası varsa bana bildirin. Teşekkürler. –

cevap

3

Büyük olasılıkla bir yuva zaman aşımıdır. Excon mümkün olduğunda kalıcı bağlantıları kullanmaya çalışır, ancak bazen bu maalesef bizi ısırmaya başlar. Görünüşe göre mandrill-api, aynı bağlantıyı/soketi şu çağrı yönteminde yeniden kullanmayı deniyor: https://bitbucket.org/mailchimp/mandrill-api-ruby/src/03e3e28e77dcba31eab7d2f9e2216b5a01d2110d/lib/mandrill.rb?at=master#cl-35

Bu normalde iyi olmalıdır, ancak belirli bir oturum daha uzun bir süre yaşıyorsa yukarıda gördüğünüz davranışa yol açabilir. (muhtemelen bir tahminle 30 saniyeden fazla). Excon bağlantısında #reset çağırmak, bununla karşılaşmayacağınızdan emin olabilirsiniz, bu yüzden muhtemelen en güvenli yoldur (yine de kalıcı bağlantıların kullanılmasını engeller, bu nedenle çok fazla istekte bulunursanız küçük bir performans artışı olur).

Umarım bu yardımcı olur, belki de bunu güncellemeyle ilgili mandrill-api ile konuşmalıyız. Performans katsayısı dikkate alındığında, sorunun ne kadar aralıklı olduğunu (veya vermediğini) söyleyebilirim. Umarım yardımcı olur, ancak tartışabileceğimiz konusunda kesinlikle mutluyum.

0

.

Aynı sorguyu kullanmak yerine, her istekte yeni bir soket açmak için herhangi bir ayar var mı?

+3

Bu neden cevap olarak işaretlendi? Bu arama için potansiyel bir yön sağlar, ancak sadece bir soru (ve orijinal gönderiye, IMO'ya bir yorum olarak daha iyi olurdu). Ben de aynı hatayı alıyorum - aralıklı - ve bir cevabı da görmek isterim. – davemyron

+0

@orangechicken, buna neyin sebep olduğunu anladın mı? –

+0

@Accipheran: Yaptığımı sanmıyorum. Kullandığım sürümden daha sonra yükselttim ve o zamandan beri problemler fark ettiğimi düşünmüyorum (ama bu sadece bir görünürlük sorunu olabilir). – davemyron