我有一个需要在服务器上连续运行的 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 不做它宣传的事情?上面的文档说它检查连接池中的连接,如果找到它就使用它,否则创建一个新连接。
任何帮助将非常感激