`sysread':中断系统调用(Errno :: EINTR)使用Ruby和mysql时

时间:2011-03-19 06:49:50

标签: mysql ruby mechanize-ruby

我正在使用mechanize抓取一个站点并推送到mysql db。我经常收到这些sys读取错误,我不确定解决方案是什么。我正在使用Ruby-mysql gem。

2 个答案:

答案 0 :(得分:2)

我正在做同样的事情(mechanize + mysql),我通过使用begin / rescue / end子句包装我的mysql调用来解决它:

begin
  mysql_insert data
rescue Interrupt, Errno::EINTR
  mysql_close connection
  connection = mysql_connect
  retry
end

请注意,这会使您的代码处于无限循环中,如果您在真实的东西中使用它,我会建议对其进行限制。所有mysql_ *都是我自己的方法。

答案 1 :(得分:1)

我遇到了同样的错误。在我的情况下,它是由两个不同的mysql-gem安装引起的,一个安装了rvm gem,另一个安装了默认的osx ruby​​。当我运行默认的osx ruby​​但使用bundler来获取rvm安装的gem时,二进制文件必须来自错误的ruby。

检查rvm环境并仅使用rvm安装的gems和bundler修复了问题。