【发布时间】:2020-01-29 07:08:14
【问题描述】:
我试图在 ibm_db 扩展中导入 server_info api。它在 Windows 中运行良好,但在 Linux 中,它返回踏入睡眠错误。
#<Thread:0x000055c9febc5ca0 sleep> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
stack level too deep (SystemStackError)
^C*** stack smashing detected ***: <unknown> terminated
代码:-
require 'ibm_db'
conn = IBM_DB.connect('DATABASE=;HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;UID=;PWD=','','')
puts 'this is ibm_db'
#Thread.report_on_exception = false
puts 'this is begin'
puts IBM_DB
serverinfo = IBM_DB::server_info( conn )
puts serverinfo.DBMS_NAME[0,100]
puts IBM_DB.close(conn)
为什么相同的代码在 Linux 中返回错误,但在 Windows 中却很糟糕。
当我在调试模式下运行代码时,它不会产生任何错误,只有在正常模式下才会产生错误。
谢谢, 阿基尔
【问题讨论】:
-
虽然我没有在我的机器上设置相同的代码。在我看来,在调试模式下,由于时间“数据库连接已建立”,您的代码工作正常,然后您继续下一步。在代码运行的情况下,在建立数据库连接之前,它会进行下一步并产生错误,因为连接未建立。它与windows/linux无关。与建立连接超时有关
-
@Chitreshgoyal 所以你说的是增加连接时间?
-
好吧,我们可以尝试两件事。 1. 休眠 5-10 秒 2. 检查数据库连接,例如: p "connected" if ActiveRecord::Base.connected? --- 在您的情况下,需要检查 ibm_db gem 如何检查它是否已连接--- 如果您遇到同样的问题,我将在我的机器上进行相同的设置。
-
嗨@Chitreshgoyal 感谢您的帮助!!!!添加睡眠 5 秒后它工作了我可以知道添加睡眠后它工作的原因以及我必须在 gem 中做哪些更改以便它可以在不添加睡眠功能的情况下工作。
标签: ruby ruby-c-extension