【发布时间】:2014-04-11 04:15:17
【问题描述】:
我有一个 ruby 脚本需要在服务器上持续运行。我已经使用 daemon gem 对其进行了守护,并且在我的脚本中我让它在无限循环中运行,因为 daemon gem 处理启动和停止启动我的脚本的进程。在我的脚本中,我首先使用 Sequel gem 和 tiny_tds 设置我的数据库实例。像这样:
DB = Sequel.connect(adapter: 'tinytds', host: MSSQLHost, database: MSSQLDatabase, user: MSSQLUser, password: MSSQLPassword)
然后我有一个loop do,这是我的无限循环。在其中,我使用DB.test_connection 测试是否有连接,然后我每隔一秒左右查询一次数据库以检查是否有新内容,使用如下查询:
DB['SELECT * FROM dbo.[MyTable]'].all do |row|
# MY logic here
# As part of my logic I test to see if I need to delete this row in the table and if so I use
DB.run('DELETE FROM dbo.[MyTable] WHERE some condition')
end
然后在我的逻辑结束时,就在我再次循环之前,我这样做:
sleep 1
DB.disconnect
所有这些都可以正常工作大约一个小时到一个半小时,所有检查表、执行逻辑、删除行等,然后它就会死掉并给我这个错误消息TinyTds::Error: Adaptive Server connection timed out
我的问题,为什么会这样?我需要以不同的方式重新格式化我的代码吗?为什么 DB.test_connection 不做它宣传的事情?上面的文档说它会检查连接池中的连接,如果找到就使用它,否则会创建一个新的。
任何帮助将不胜感激
【问题讨论】:
标签: ruby sequel freetds tiny-tds