2013-07-21 26 views
5

Tôi đang sử dụng Mandrill-api trong Ruby để gửi email giao dịch theo chương trình.Mandrill-api Excon :: Lỗi :: SocketError

Tôi có (nhiều hơn hoặc ít hơn) dòng sau trong ứng dụng ray của tôi,

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

Vấn đề là khi chạy trong sản xuất, nó sẽ trả về lỗi sau một lần trong một thời gian.

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

Tôi không biết cách gỡ lỗi vấn đề này. Nếu ai đó có thể làm tôi sáng tỏ về cách tiếp cận để gỡ lỗi này, tôi đánh giá cao nó.

Gems Thông tin:

  • giống phi phi-api (1.0.33)
  • excon (0.16.10)

env sản xuất:

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 

Chạy trên:

Máy chủ Apache: Apache /2.2.22 (Ubuntu)

hành khách: 3.0.14

+0

Sẽ dễ dàng hơn nhiều nếu bạn có thể cung cấp một số thông tin về môi trường sản xuất của mình. – tyler

+0

tyler, thêm env sản xuất. Hãy cho tôi biết nếu có thêm thông tin cụ thể để giúp gỡ lỗi. Cảm ơn. –

Trả lời

3

Rất có thể là thời gian chờ của ổ cắm. Excon cố gắng sử dụng các kết nối liên tục khi có thể, nhưng đôi khi điều này trở lại khiến chúng tôi không may. Có vẻ như mandrill-api đang cố sử dụng lại cùng một kết nối/ổ cắm trong phương thức gọi của nó: https://bitbucket.org/mailchimp/mandrill-api-ruby/src/03e3e28e77dcba31eab7d2f9e2216b5a01d2110d/lib/mandrill.rb?at=master#cl-35

Điều đó thường là tốt, nhưng có thể dẫn đến hành vi bạn thấy ở trên. (nghĩa là có thể lớn hơn 30 giây, khi đoán). Gọi #reset trên kết nối excon sẽ đảm bảo rằng bạn sẽ không gặp phải điều này, vì vậy đó có thể là cách an toàn nhất (mặc dù điều này ngăn cản các kết nối liên tục bị sử dụng, vì vậy sẽ có một hiệu suất nhỏ nếu bạn đang thực hiện nhiều yêu cầu).

Tôi hy vọng có thể giúp, có lẽ chúng ta nên thảo luận với mandrill-api về việc cập nhật điều này. Có thể chỉ phụ thuộc vào sự gián đoạn (hay không) vấn đề là, do hiệu suất đạt được liên quan. Hy vọng rằng sẽ giúp, nhưng chắc chắn hạnh phúc để thảo luận/giúp đỡ tuy nhiên tôi có thể.

0

Nó có thể có cái gì để làm với việc giữ ổ cắm mở ngoài hết hạn, cho rằng đó là một lỗi EOF và là liên tục.

Có bất kỳ cài đặt nào để mở một ổ cắm mới với mỗi yêu cầu thay vì sử dụng lại cùng một ổ cắm không?

+3

Tại sao điều này được chọn làm câu trả lời? Nó cung cấp một hướng tiềm năng để tìm kiếm nhưng nó chỉ là một câu hỏi (và sẽ tốt hơn như một bình luận cho bài đăng gốc, IMO). Tôi cũng nhận được lỗi tương tự - không liên tục - và cũng muốn xem câu trả lời. – davemyron

+0

@orangechicken, bạn đã bao giờ tìm ra điều gì đã gây ra điều này? –

+0

@Accipheran: Tôi không tin tôi đã làm. Tôi đã nâng cấp ra khỏi phiên bản tôi đã sử dụng sau đó và không nghĩ rằng tôi đã nhận thấy vấn đề kể từ (nhưng đó chỉ có thể là một vấn đề tầm nhìn). – davemyron

Các vấn đề liên quan