加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – Mandrill-api Excon :: Errors :: SocketError

发布时间:2020-12-16 20:59:45 所属栏目:百科 来源:网络整理
导读:我在 Ruby中使用Mandrill-api以编程方式发送交易电子邮件. 我在rails应用程序中有(或多或少)以下行, mandrill ||= Mandrill::API.new const(:API)[:MANDRILL_APIKEY]... (constructing the message,content,etc)mandrill.messages.send_template templ,templ
我在 Ruby中使用Mandrill-api以编程方式发送交易电子邮件.

我在rails应用程序中有(或多或少)以下行,

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

问题是在生产中运行时,偶尔会返回以下错误.

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

我不知道如何调试此问题.如果有人能让我了解调试方法,我非常感谢.

宝石信息:

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

生产环境:

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

运行:

Apache服务器:Apache / 2.2.22(Ubuntu)

乘客:3.0.14

解决方法

它很可能是套接字超时. Excon尝试在可能的情况下使用持久连接,但不幸的是,有时这会让我们感到困惑.似乎mandrill-api试图在它的调用方法中重用相同的连接/套接字: https://bitbucket.org/mailchimp/mandrill-api-ruby/src/03e3e28e77dcba31eab7d2f9e2216b5a01d2110d/lib/mandrill.rb?at=master#cl-35

这应该是正常的,但如果给定的会话存在更长的时间(即可能大于30秒,在猜测),可能会导致您在上面看到的行为.在excon连接上调用#reset将确保您不会遇到这种情况,因此这可能是最安全的方式(尽管这可以防止使用持久连接,因此如果您执行大量请求会有很小的性能损失).

我希望有所帮助,也许我们应该与mandrill-api讨论更新这个问题.考虑到所涉及的性能影响,可能只取决于问题的间歇性(或不是).希望有所帮助,但我当然乐意讨论/帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读